Я хотел сделать простую C
программу, чтобы перейти в каталог моего проекта. Его содержание таково:
#include <unistd.h>
int main()
{
chdir("/home/enedil/projects/algo");
return 0;
}
Я скомпилировал его с помощью следующей команды ( pro.c
это имя файла):
gcc pro.c -o /usr/local/bin/pro
Не было ни ошибок, ни предупреждений. Но когда я запускаю его, он не меняет каталог. Почему?
process
c
cd-command
enedil
источник
источник
alias proj='cd ~/enedil/projects/algo'
cd ~/projects/algo
? Это идея!Ответы:
Ваша программа делает именно то, что вы говорите это сделать: он изменяет рабочий каталог для себя , чтобы
/home/enedil/projects/algo
. Но как только он выходит, рабочий каталог оболочки восстанавливается.Я думаю, что вы хотите достичь, это изменить рабочий каталог родительского процесса, то есть оболочки, не прибегая к простому
cd
. Есть метод , но, как говорит его автор: не делайте этого.источник
Текущий рабочий каталог является локальным для процесса. Итак, то, что вы хотите, не возможно.
источник
Вы также можете использовать
CDPATH
переменную среды. Как объяснено вman bash
:Так, например, вы можете добавить эту строку в ваш
~/.profile
:Теперь вы можете запустить
cd projects
из любого каталога и перейти к~/projects
.источник
Чтобы сделать это для оболочки, используйте
source
команду (с псевдонимом.
). Он будет запускать приложение в контексте текущей оболочки, а не создавать новый контекст оболочки. Так вы можете установить переменные окружения. Если вы заметите все сценарии запуска в/etc/rc.d
или/etc/init.d
, вы увидите множество сценариев, которые включены в другие сценарии с помощью команды.
Вызывает сценарий/etc/init.d/rcvars
так , что все , что он изменяет сохраняется в текущей среде.источник