Когда я использую chdir() для изменения текущего каталога, программа не будет меняться при выключении программы. Итак, как я могу применить chdir() к Shell после использования chdir(), и программы были прерваны?Как изменить каталог оболочки в программе на языке C?
ответ
Вы не можете сделать это (изменение каталога родительских оболочек из программы C). Текущий каталог является атрибутом каждого process, а ваша оболочка работает в другом процессе, чем ваша программа (так что процесс оболочки и процесс вашей программы имеют каждый свой собственный текущий каталог).
Прочитано Advanced Linux Programming. Он имеет несколько глав, связанных с вашей проблемой.
Может быть, вы могли бы добавить некоторые функции оболочки (например, в ваш ~/.bashrc
...), которые, возможно, могли бы использовать eval
запустить C программу (которая будет выводить некоторую cd
команды, что eval
или source
встроенных вашей оболочки будет обрабатывать в пределах тот же процесс оболочки); BTW ssh-agent может быть вдохновляющим. На самом деле я не рекомендую этот маршрут, если вы новичок.
PS. Вы действительно должны мотивировать свой вопрос: и дать много другой контекст; он плохо пахнет, как XY problem.
'execl' только в случае необходимости для выполнения команды оболочки – Ashish
@Ashish: Я не понимаю, что вы имеете в виду (и как это связано с вопросом OP) , и это не меняет того факта, что каждый процесс имеет свой собственный текущий каталог. –
** Почему вы спрашиваете **? Пожалуйста, ** отредактируйте вопрос **, чтобы улучшить его и мотивировать. –
Вы можете подумать об изменении переменной среды PWD (в зависимости от вашей ОС). Но я его не тестировал. – LotoLo
@LotoLo: изменение 'PWD' не повлияет на текущий каталог родительского процесса (то есть на процесс оболочки) –