cd para o diretório anterior sem o eco do nome do diretório

6

Esta resposta deu-me cd - como abreviação para mudar para o meu diretório anterior no Bash. Ele tem um grande problema: ele imprime o diretório para o qual ele muda, desperdiçando meu espaço na tela, já que esse diretório é repetido no prompt da próxima linha.

Eu sei que posso fazer cd $OLDPWD , também mencionado nessa resposta, e cd - >/dev/null , mas isso é muito mais digitação.

Na página bash man, ele diz:

... or if - is the first argument, and the directory change is successful, the absolute path name of the new working directory is written to the standard output.

Como posso fazer com que - não seja o primeiro argumento? Usando algum dos argumentos cd opcionais? Qualquer outra maneira de suprimir o eco ou minimizar a digitação sem a necessidade de definir funções / aliases em cada máquina com a qual eu trabalhe?

    
por Ishran 17.01.2015 / 09:56

1 resposta

10

cd leva em consideração apenas o primeiro argumento, ignorando todos os outros. Nenhuma das opções influencia o eco do nome do caminho anterior (talvez o documentado -@ tenha esse efeito, mas essa é uma opção inválida no meu sistema).

Se você não quiser usar um alias / função, o que poderia dar a você menos caracteres para digitar cd - , ou redirecionar para /dev/null , minha sugestão é começar a usar a expansão til especial em bash :

cd ~-

Da página de manual bash :

If the tilde-prefix is a '~-', the value of the shell variable OLDPWD, if it is set, is substituted.

Esta parece ser outra área em bash , onde algum significado especial foi criado. A expansão til funciona normalmente no $ DIRSTACK, manipulada / investigada por pushd , popd e dirs , pode ser usada em outros comandos também ( cp ~-/somefile . ) e se você usou pushd você pode use ~N (onde N é um número de níveis retornados) para acessar esses diretórios (para cd ou outros comandos).

BTW se você tiver contas em várias máquinas e supondo que você usa o ssh para fazer login em um único lugar, considere adicionar ao seu ~/.bashrc :

if [ -f ~/.bash_common ]; then
    . ~/.bash_common
fi

e, em seguida, temos um script em sua máquina de trabalho que usa scp para "empurrar" bash_common para cada uma dessas máquinas. Dessa forma, você pode adicionar e compartilhar funcionalidades comuns em várias máquinas com sobrecarga mínima.

    
por 17.01.2015 / 10:11