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

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

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

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

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

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

  • Как я могу преследовать программу, которая поднимает температуру моего ноутбука?
  • Можно ли вызвать вызов exec, который «возвращает»?
  • Как я могу выполнить процесс, который я запускаю во время сеанса сеанса SSH после окончания сеанса?
  • Как установить идентификатор для нескольких фоновых процессов?
  • Отслеживать процесс, который имеет notty
  • Как убить процесс, выполняемый в определенном скрипте
  • Что может послужить причиной перехода в безопасное состояние спящего режима для этого конкретного процесса?
  • Почему SSH -t не ждет фоновых процессов?
  • 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

    Запуск приложения GTK от CHROOT во время запуска LightDM

    Измените утилиту диска gnome для использования двоичных единиц

    Как исправить ошибку: «ошибка поиска символа: /usr/local/lib/libQt5DBus.so.5: undefined symbol»?

    184 переменных среды слишком много?

    Kernel Panic – не синхронизация: VFS: невозможно монтировать root fs после компиляции нового ядра

    Невозможно изменить геометрию по умолчанию vncserver

    Проверить пароль для учетной записи пользователя из сценария оболочки

    Ошибка каббала: невозможно выполнить скомпилированные программы

    Как найти несколько непоследовательных букв в имени файла

    (debian) установка mod_qos на apache приводит к ошибке при запуске

    awk переменная как регулярное выражение

    Скраб ZFS не завершается

    Как автоматически запускать команду после выхода из ssh

    Как я могу получить журнал всех неверно введенных паролей в Linux?

    Передача команды sed для открытия команды

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