Respostas:
O @erewok já respondeu à pergunta , mas tentarei explicar o que realmente está acontecendo e por que você está vendo o comportamento que faz.
O problema está no seu redirecionamento. Tu estás a escrever:
cd - 2>&1 /dev/null
que, como os redirecionamentos podem aparecer em qualquer lugar 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, torna-se:
cd - /dev/null
Vê 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 de uma vez, cd
considera apenas seu primeiro argumento, que neste caso é o -
.
O que você provavelmente pretendeu escrever é um cd
comando com redirecionamento de stderr e stdout para / dev / null. Existem duas maneiras de fazer isso.
O mais fácil no seu caso seria simplesmente informar ao shell que você deseja redirecionar adicionando um >
caractere. Isto é o que @erewok está sugerindo.
cd - 2>&1 >/dev/null
Primeiro, ele redireciona o stderr (descritor de arquivo 2) para o descritor de arquivo 1 (stdout) e, em seguida, redireciona o stdout (implícito 1) para / dev / null. Observe que a encomenda é importante; você não obterá o mesmo resultado se reverter os redirecionamentos, embora em alguns casos possa parecer que você o faz devido à maneira como o programa em particular usa os respectivos fluxos de saída.
Como alternativa, como foi sugerido por @demure , você pode usar &>
para redirecionar os dois fluxos de uma só vez, se essa sintaxe for suportada pelo seu shell.
cd - &>/dev/null
Observe que qualquer uma dessas alternativas também silenciará o erro quando $OLDPWD
não existir mais, pois você está redirecionando a saída de erro padrão para o buraco negro do sistema. Se isso é uma preocupação, eu verificaria $?
depois; você deve confirmar isso pessoalmente, se for uma preocupação real, mas, pelo menos nos meus testes, uma falha cd
(seja cd $someplace
ou cd -
) ocorre $? = 1
após o sucesso $? = 0
.
Talvez você possa usar
cd $OLDPWD
mas, neste caso, você precisará digitar mais :)
Mas você terá uma vantagem: se houver algum erro, a mensagem não será redirecionada para / dev / null.
cd /tmp
bash
cd -
diz bash: cd: OLDPWD not set
no segundo cd; enquanto a sequência cd /tmp
bash
cd $OLDPWD
coloca você em ~ (quase certamente porque $ OLDPWD se expande para uma sequência vazia). cd $OLDPWD
funcionará bem depois que você tiver feito pelo menos um cd
dentro do shell em questão, mas não antes disso.
$OLDPWD
não estiver definido, isso fará você entrar~
.cd -
imprimirá um erro (e presumivelmente deixará você onde você já estava).