2

Я определил этот псевдоним для запуска bash и перехода к определенной папке, но когда я запускаю его, он запускает только bash и остается в текущем пути /directory /folder.

Я определил их двумя разными способами в ~/.bashrc, но оба метода не могут перейти к определенной папке.

Def # 1

alias setup_ROR="bash; cd /users/nikeelevet/code/rails;" 

Def # 2

function setup_ROR() { 
        bash 
        cd /users/nikeelevet/code/rails 
}

Есть идеи, почему CD не работает?

Спасибо!

5 ответов5

2

Они оба открывают новую оболочку, ждут, пока она закроется, а затем меняют каталоги. И то, и другое можно исправить, не пытаясь запустить bash.

1

Почему не просто

alias setup_ROR="cd /users/nikeelevet/code/rails" 

А также

function setup_ROR() { 
        cd /users/nikeelevet/code/rails 
}

Если это в вашем bashrc, то вы уже в оболочке bash при запуске псевдонима, зачем запускать другой bash?

1

Псевдоним работает. Если вы попробуете это:

~$alias test='ls;ls;'

Затем запустите команду test

~$test

Вы увидите, что команда 'ls' запускается дважды. Причина, по которой вы не можете перейти в папку, заключается в том, что когда она впервые выполняет команду «bash», система запустит bash, который ожидает вашего ввода и не вернется, пока вы не введете «exit». Я думаю, что если вы запустите setup_ROR, а затем введите «выход», вы перейдете в свой каталог.

Я не понимаю, почему вы хотите запустить bash в своем псевдониме.

1

Я полагаюсь на ответ @ chown, но если @Waley действительно требует нового экземпляра bash, должно хватить следующего:

alias setup_ROR="pushd /users/nikeelevet/code/rails; bash; popd" 

Это запустит новый bash в соответствующем каталоге, а затем, когда пользователь выйдет из этого процесса, он вернется в исходное местоположение.

1

Итак, что вы пытаетесь сделать, это запустить новую оболочку с определенным текущим каталогом, да?

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

setup_ROR() {
    ( cd /users/nikeelevet/code/rails ; bash
}

Скобки приводят к тому, что две команды выполняются в подоболочке, поэтому cd не влияет на текущую оболочку (как вы увидите при выходе из подоболочки).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .