2016-11-01 9 views
-1

Когда я использую chdir() для изменения текущего каталога, программа не будет меняться при выключении программы. Итак, как я могу применить chdir() к Shell после использования chdir(), и программы были прерваны?Как изменить каталог оболочки в программе на языке C?

+0

** Почему вы спрашиваете **? Пожалуйста, ** отредактируйте вопрос **, чтобы улучшить его и мотивировать. –

+0

Вы можете подумать об изменении переменной среды PWD (в зависимости от вашей ОС). Но я его не тестировал. – LotoLo

+1

@LotoLo: изменение 'PWD' не повлияет на текущий каталог родительского процесса (то есть на процесс оболочки) –

ответ

3

Вы не можете сделать это (изменение каталога родительских оболочек из программы C). Текущий каталог является атрибутом каждого process, а ваша оболочка работает в другом процессе, чем ваша программа (так что процесс оболочки и процесс вашей программы имеют каждый свой собственный текущий каталог).

Прочитано Advanced Linux Programming. Он имеет несколько глав, связанных с вашей проблемой.

Может быть, вы могли бы добавить некоторые функции оболочки (например, в ваш ~/.bashrc ...), которые, возможно, могли бы использовать eval запустить C программу (которая будет выводить некоторую cd команды, что eval или source встроенных вашей оболочки будет обрабатывать в пределах тот же процесс оболочки); BTW ssh-agent может быть вдохновляющим. На самом деле я не рекомендую этот маршрут, если вы новичок.

PS. Вы действительно должны мотивировать свой вопрос: и дать много другой контекст; он плохо пахнет, как XY problem.

+0

'execl' только в случае необходимости для выполнения команды оболочки – Ashish

+1

@Ashish: Я не понимаю, что вы имеете в виду (и как это связано с вопросом OP) , и это не меняет того факта, что каждый процесс имеет свой собственный текущий каталог. –