Ambos abrem um novo shell, aguardam o fechamento e, em seguida, alteram os diretórios. Ambos podem ser corrigidos por não tentar executar o bash.
Eu tenho este alias definido para executar o bash, em seguida, navegar para uma determinada pasta, mas quando eu executá-lo, ele só executa o bash e permanece no caminho / diretório / pasta atual.
Eu os defini de duas maneiras diferentes em ~ / .bashrc, mas os dois métodos não conseguem navegar até a determinada pasta.
def # 1
alias setup_ROR="bash; cd /users/nikeelevet/code/rails;"
def # 2
function setup_ROR() {
bash
cd /users/nikeelevet/code/rails
}
Alguma ideia de por que o CD não está funcionando?
Obrigado!
Por que não apenas:
alias setup_ROR="cd /users/nikeelevet/code/rails"
e
function setup_ROR() {
cd /users/nikeelevet/code/rails
}
Se estiver no seu bashrc, então você já está em um bash shell ao executar o alias, por que executar outro bash?
O alias está funcionando. Se você tentar este:
~$alias test='ls;ls;'
Em seguida, execute o comando test
~$test
Você verá que o comando 'ls' é executado duas vezes. O motivo pelo qual você não pode navegar para a pasta é quando ele executa o comando 'bash' pela primeira vez, o sistema iniciará um bash, que espera sua entrada e não retornará até que você digite 'exit'. Eu acho que se você executar setup_ROR, digite 'exit', você irá navegar em seu diretório.
Eu não entendi porque você quer executar o 'bash' em seu alias.
Adia a resposta do @ chown, mas se o @Waley realmente requer uma nova instância do bash, o seguinte deve ser suficiente:
alias setup_ROR="pushd /users/nikeelevet/code/rails; bash; popd"
Isso iniciará um novo bash no diretório relevante e, quando o usuário sair desse processo, retornará ao local original
Então, o que você está tentando fazer é iniciar um novo shell com um determinado diretório atual, sim?
Ocorre que o diretório de trabalho atual é uma das coisas herdadas pelos novos processos. Então, isso deve atender aos seus propósitos:
setup_ROR() {
( cd /users/nikeelevet/code/rails ; bash
}
Os parênteses fazem com que os dois comandos sejam executados em um subshell, portanto, o cd
não afeta seu shell atual (como você verá ao sair do subshell).
Tags bash alias shell unix .bash-profile