Experimente assim:
cd - > /dev/null
Você também pode fazer:
cd - > uselessfile
Isso enviará a saída para o arquivo "uselessfile" em vez de STDOUT.
Você também pode acrescentar, em vez de criar ou substituir o arquivo.
cd - >> uselessfile
Como executo o comando cd - sem fazer eco em nenhuma saída?
Eu tentei cd - 2>&1 /dev/null , mas isso imprime o diretório de destino.
A razão para isso é que eu gostaria de usar uma função bash e preferiria não ter a saída desnecessária.
Experimente assim:
cd - > /dev/null
Você também pode fazer:
cd - > uselessfile
Isso enviará a saída para o arquivo "uselessfile" em vez de STDOUT.
Você também pode acrescentar, em vez de criar ou substituir o arquivo.
cd - >> uselessfile
@erewok já respondeu à pergunta , mas vou tentar explicar o que realmente está acontecendo e por que você está vendo o comportamento que você faz.
O problema está no seu redirecionamento. Você está escrevendo:
cd - 2>&1 /dev/null
que porque os redirecionamentos podem aparecer em qualquer lugar dentro da linha de comando (você pode confirmar isso com algo simples como echo a b 2>&1 c </etc/fstab d ), depois que os redirecionamentos são removidos, na verdade se torna:
cd - /dev/null
Veja o problema? Você está passando dois argumentos para cd , não um argumento e dois redirecionamentos. Como você só pode estar em um diretório atual ao mesmo tempo, cd considera apenas seu primeiro argumento, que nesse caso é o - .
O que você provavelmente pretende escrever é um comando cd com o redirecionamento de stderr e stdout para / dev / null. Existem duas maneiras de fazer isso.
O mais fácil no seu caso seria simplesmente informar o shell que você deseja redirecionar, adicionando um caractere > . Isto é o que @erewok está sugerindo.
cd - 2>&1 >/dev/null
Primeiro, ele redireciona stderr (descritor de arquivo 2) para o descritor de arquivo 1 (stdout) e redireciona stdout (implícito 1) para / dev / null. Note que a encomenda é importante; você não obterá o mesmo resultado se reverter os redirecionamentos, embora em alguns casos possa parecer que você faz por causa de como o programa particular usa os respectivos fluxos de saída.
Como alternativa, conforme sugerido por @demure , você pode usar &> para redirecionar os dois fluxos de uma vez se esta sintaxe é suportada pelo seu shell.
cd - &>/dev/null
Observe que qualquer uma dessas alternativas também silenciará o erro quando $OLDPWD não existir mais, já que você está redirecionando a saída do erro padrão para o buraco negro do sistema. Se isso for uma preocupação, eu verificaria $? depois; você deve confirmar isso por si mesmo se for uma preocupação real, mas pelo menos nos meus testes, um cd (se cd $someplace ou cd - ) falha $? = 1 enquanto após sucesso $? = 0 .
Talvez você possa usar
cd $OLDPWD
mas, neste caso, você precisará de mais digitação:)
Mas você terá uma vantagem: se houver algum erro, a mensagem não será redirecionada para / dev / null.
Redirecionar stdout e stderr:
cd - &>/dev/null
o &> é a versão curta de cd - 2>/dev/null 1>&2 , que eu acho que você queria usar ...
&> precisa de bash > = 4.0. a maioria dos comandos pode ser apontada em locais, portanto, é improvável que você realmente precise cd
Você pode usar:
cd ~-
De acordo com a página man bash sob Tilde Expansion :
If the tilde-prefix is a '~-', the value of the shell variable OLDPWD, if it is set, is substituted.
Tags bash