Псевдоним команды 'cd' с Subshell не работает должным образом - PullRequest
2 голосов
/ 20 марта 2012

Я только что узнал об псевдонимах в bash.Я создал один так:

alias="cd $directory"

, где $directory от ввода ввода.В другом сценарии оболочки я могу запустить подоболочку следующим образом:

( bash )

, что приводит меня к подоболочке, где, если я запускаю cd, я иду к псевдониму,cd $directory.Это замечательно, и, кажется, работает должным образом.

Когда я запускаю подоболочку, я ищу то, что происходит автоматически, поэтому я попробовал:

( bash | cd )

думал, что запустит subshell и cd для введенного пользователем $directory, но он не работает.Как я могу заставить это работать?Я также пытался ( bash -c cd) безрезультатно.

Спасибо.

1 Ответ

3 голосов
/ 20 марта 2012

Причина, по которой ( bash | cd ) не работает, заключается в том, что каждая команда в конвейере запускается в отдельной подоболочке, поэтому ( bash | cd ) по существу эквивалентен ( ( bash ) | ( cd ) ) (за исключением того, что последняя запускает даже more оболочек, конечно).Вместо этого вы должны иметь возможность написать:

( cd ; bash )

(который запускается cd до запуска bash), поскольку bash будет наследовать копию среды выполненияsubshell, с которого он был запущен.

Кстати, вы уверены, что хотите создать cd как псевдоним?Это кажется ошибочным и запутанным для меня.Я думаю, что было бы лучше создать функцию оболочки, которая cd s в указанный пользователем каталог:

function cd_user () { cd "$directory" ; }

( cd_user ; bash )
...