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

9

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

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

Na bashpágina do manual, diz:

... ou se - é o primeiro argumento e a alteração do diretório é bem-sucedida, o nome do caminho absoluto do novo diretório de trabalho é gravado na saída padrão.

Como posso fazer -para não ser o primeiro argumento? Usando algum dos cdargumentos opcionais? Alguma outra maneira de suprimir o eco ou minimizar a digitação sem a necessidade de definir funções / aliases em todas as máquinas com as quais trabalho?

Ishran
fonte
Praticamente a mesma pergunta aqui ...
don_crissti

Respostas:

12

cdleva 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, que pode fornecer menos caracteres para digitar do que cd -ou redirecionar /dev/null, minha sugestão é começar a usar a expansão til especial em bash:

cd ~-

Na bashpágina do manual:

Se o prefixo til for um `~ - ', o valor da variável de shell OLDPWD, se estiver definido, será substituído.

Esta parece ser mais uma área em bashque algum significado especial foi criado. Tilde expansão normalmente trabalha sobre os US $ DIRSTACK, manipulado / investigado por pushd, popde dirs, ele pode ser usado em outros comandos, bem como ( cp ~-/somefile .) e se você tiver usado pushdvocê pode usar ~N(onde N é um número de níveis empurrado para trás) para chegar ao esses diretórios (para cdou outros comandos).


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

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

e, em seguida, tenha um script em sua máquina de trabalho que use scppara "enviar" bash_commona cada uma dessas máquinas. Dessa forma, você pode adicionar e compartilhar funcionalidades comuns em várias máquinas com o mínimo de sobrecarga.

Anthon
fonte