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