Псевдоним с несколькими командами входит в оболочку 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 в своем псевдониме.

Другие вопросы по тегам