O alias de vários comandos entra no shell do bash, mas não consegue navegar para o caminho

2

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 Waley Chen 24.10.2011 / 03:02

5 respostas

2

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.

    
por 24.10.2011 / 03:05
1

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?

    
por 24.10.2011 / 03:08
1

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.

    
por 24.10.2011 / 03:10
1

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

    
por 24.10.2011 / 03:10
1

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).

    
por 24.10.2011 / 03:14