chdir (<каталог>) не меняет каталог после выхода в оболочку

Я хотел сделать простую программу на языке C чтобы перейти к моей директории проекта. Его содержание выглядит следующим образом:

 #include <unistd.h> int main() { chdir("/home/enedil/projects/algo"); return 0; } 

Я скомпилировал его с помощью следующей команды ( pro.c – это имя файла):

 gcc pro.c -o /usr/local/bin/pro 

Ошибок и предупреждений не было. Но когда я запускаю его, он не меняет каталог. Зачем?

  • автоматические процессы убийства
  • Просмотр предков текущего процесса и формирование результата
  • Как определить, работает ли программа при запуске оболочки и запустить эту программу, если она еще не запущена?
  • Завершение скрипта оболочки bash, работающего в фоновом режиме
  • Как узнать, для чего этот процесс?
  • Как я могу преследовать программу, которая поднимает температуру моего ноутбука?
  • отфильтровать определенные процессы и / или pids в ftrace?
  • Система Solaris 10 - дисковое пространство продолжает расти даже после удаления каталога
  • 4 Solutions collect form web for “chdir (<каталог>) не меняет каталог после выхода в оболочку”

    Ваша программа делает именно то, что вы говорите: он меняет рабочий каталог для себя /home/enedil/projects/algo . Но как только он выйдет, рабочий каталог оболочки будет восстановлен.

    Я предполагаю, что вы хотите изменить рабочий каталог родительского процесса, то есть оболочку, не прибегая к простому cd . Есть метод , но, как говорит его автор, не делайте этого.

    Текущий рабочий каталог является локальным для процесса. Итак, вы не хотите.

    Вы также можете использовать переменную окружения CDPATH . Как объясняется в man bash :

      CDPATH The search path for the cd command. This is a colon-separated list of directories in which the shell looks for destination directories specified by the cd command. A sample value is ".:~:/usr". 

    Так, например, вы можете добавить эту строку в свой файл ~/.profile :

     CDPATH=~/projects 

    Теперь вы можете запускать cd projects из любого каталога и переходить к ~/projects .

    Чтобы сделать это для оболочки, используйте команду source (aliased to . ). Он будет запускать приложение в контексте текущей оболочки, а не создавать новый контекст оболочки. Так вы можете также установить переменные среды. Если вы заметили все сценарии запуска в /etc/rc.d или /etc/init.d , вы увидите множество сценариев, которые включены в другие скрипты с помощью команды

     . /etc/init.d/rcvars 

    . вызывает сценарий /etc/init.d/rcvars так что все, что оно меняет, сохраняется в текущей среде.

    Interesting Posts

    Используйте список строк, чтобы заменить параметр sql, распечатывающий весь файл для каждой замены

    build script: как реализовать «пропустить ранее выполненный шаг»,

    Почему кто-то хочет изменить дату последнего доступа к файлу без фактических изменений внутри самого файла?

    Почему Apple защищает авторские права на страницах lpadmin, lpq и lpstat?

    Как установить Python 3.6?

    Драйвер исчезает с dev во время копирования ddrescue или восстановления testdisk

    Как классифицировать эти строки в этом файле ASCII

    Как запустить программу в качестве пользователя root при запуске машины Ubuntu 15.04?

    Черно-белый (сероватый цвет) консоль и X11

    Я хочу найти строку и вытащить все строки между двумя шаблонами

    Как запустить awk для некоторого количества строк.?

    Убедитесь, что файловый сокет уже открыт

    Как завершить работу с consolekit без sysvinit (но с systemd)

    Что такое директива ifcfg IPV4_FAILURE_FATAL и по каким сценариям я хочу ее использовать?

    Скажите Bacula использовать только пустые ленты

    Linux и Unix - лучшая ОС в мире.