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

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

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

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

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

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

  • Установить идентификатор родительского процесса из ShellScript, позже удалить все дочерние процессы
  • Регистрация того, что закончилось процессом?
  • принимающая команда как параметр в bash
  • Запись и отображение информации о загрузочном процессе в Linux
  • Реализуются ли потоки как процессы в Linux?
  • Как сделать netstat, который будет фильтровать только на основе pid
  • Есть ли процесс, который не отправляет EOF до завершения и как его создать?
  • Самый изящный способ прекратить навязчивую программу
  • 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 так что все, что оно меняет, сохраняется в текущей среде.

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