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

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

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

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

  • Состояние сетевых портов
  • Влияние статической и динамической привязки на начальный адрес
  • Выполнить команду из определенной папки
  • Создайте и перейдите в каталог в одной команде - unix
  • Сценарий Bash не будет работать в текущем каталоге
  • Ловушки системы вызова (3) или popen (3) с постоянной строкой?
  •  gcc pro.c -o /usr/local/bin/pro 

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

  • Определение конкретного процессора, на котором выполняется процесс
  • extract включить в файл C
  • Не удается получить каталог с папкой, в которой у меня есть разрешения для
  • Что означает «cd &»?
  • Баш-оболочка, запущенная forkpty (), порождает дочерние процессы, игнорирующие SIGINT. Почему и как я могу гарантировать, что SIGINT не игнорируется?
  • Вычисление общего использования ЦП в C
  • 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 - лучшая ОС в мире.