Псевдоним команды 'cd' с Subshell не работает должным образом
Я только что узнал об псевдонимах в bash. Я создал один так:
alias="cd $directory"
где $directory
это от использования ввода. В другом сценарии оболочки я могу запустить подоболочку следующим образом:
( bash )
что подводит меня к сути дела, где, если я бегу cd
Я иду на псевдоним, cd $directory
, Это здорово, и, кажется, работает как положено.
То, что я ищу, это когда запускается подоболочка, CD происходит автоматически, поэтому я попробовал:
( bash | cd )
думая, что запустит subshell и cd для введенного пользователем $directory
но это не работает Как я могу заставить это работать? Я тоже пробовал ( bash -c cd)
но безрезультатно.
Благодарю.
1 ответ
Причина того, что ( bash | cd )
не работает в том, что каждая команда в конвейере запускается в отдельной подоболочке, поэтому ( bash | cd )
по существу эквивалентно ( ( bash ) | ( cd ) )
(кроме того, что последний запускает еще больше подоболочек, конечно). Вместо этого вы должны написать:
( cd ; bash )
(который работает cd
перед запуском bash
) поскольку bash
будет наследовать копию среды выполнения подоболочки, из которой он был запущен.
Кстати - вы уверены, что хотите создать cd
как псевдоним таким образом? Это кажется ошибочным и запутанным для меня. Я думаю, что было бы лучше создать функцию оболочки, которая cd
s в указанный пользователем каталог:
function cd_user () { cd "$directory" ; }
( cd_user ; bash )