Псевдоним с несколькими командами входит в оболочку bash, но не может перейти к пути
Я определил этот псевдоним для запуска bash и перехода к определенной папке, но когда я запускаю его, он запускает только bash и остается в текущем пути / директории / папке.
Я определил их двумя разными способами в ~/.bashrc, но оба метода не могут перейти к определенной папке.
DeF#1
alias setup_ROR="bash; cd /users/nikeelevet/code/rails;"
определение № 2
function setup_ROR() {
bash
cd /users/nikeelevet/code/rails
}
Есть идеи, почему CD не работает?
Спасибо!
5 ответов
Они оба открывают новую оболочку, ждут ее закрытия, затем меняют каталоги. И то и другое можно исправить, не пытаясь запустить bash.
Итак, что вы пытаетесь сделать, это запустить новую оболочку с определенным текущим каталогом, да?
Как это бывает, текущий рабочий каталог является одной из вещей, которые наследуются новыми процессами. Так что это должно соответствовать вашим целям:
setup_ROR() {
( cd /users/nikeelevet/code/rails ; bash
}
Скобки приводят к тому, что две команды выполняются в подоболочке, поэтому cd
не влияет на текущую оболочку (как вы увидите при выходе из подоболочки).
Почему бы просто:
alias setup_ROR="cd /users/nikeelevet/code/rails"
А также
function setup_ROR() {
cd /users/nikeelevet/code/rails
}
Если это в вашем bashrc, то вы уже в оболочке bash при запуске псевдонима, зачем запускать другой bash?
Я полагаюсь на ответ @chown, но если @Waley действительно требует нового экземпляра bash, должно хватить следующего:
alias setup_ROR="pushd /users/nikeelevet/code/rails; bash; popd"
Это запустит новый bash в соответствующем каталоге, а затем, когда пользователь выйдет из этого процесса, он вернется в исходное местоположение.
Псевдоним работает. Если вы попробуете это:
~$alias test='ls;ls;'
Затем запустите команду test
~$test
Вы увидите, что команда 'ls' запускается дважды. Причина, по которой вы не можете перейти в папку, заключается в том, что когда она впервые выполняет команду "bash", система запустит bash, который ожидает вашего ввода и не вернется, пока вы не введете "exit". Я думаю, что если вы запустите setup_ROR, а затем введите "выход", вы перейдете в свой каталог.
Я не понимаю, почему вы хотите запустить bash в своем псевдониме.