Como executo o cd -
comando sem ecoar 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 usá-la como uma função bash e preferiria não ter a saída desnecessária.
Tente assim:
cd - > /dev/null
Você também pode fazer:
cd - > uselessfile
Isso enviará a saída para o arquivo "uselessfile" em vez de para STDOUT.
Você também pode anexar em vez de criar ou substituir o arquivo.
cd - >> uselessfile
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.
$OLDPWD
não estiver definido, isso fará você entrar~
.cd -
imprimirá um erro (e presumivelmente deixará você onde você já estava).cd /tmp
bash
cd -
dizbash: cd: OLDPWD not set
no segundo cd; enquanto a sequênciacd /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 umcd
dentro do shell em questão, mas não antes disso.Redirecionar stdout e stderr:
cd - &>/dev/null
a
&>
é a versão abreviada dacd - 2>/dev/null 1>&2
qual eu acho que você pretende usar ...&>
precisa do bash> = 4.0.Ps. a maioria dos comandos pode ser apontada para locais, por isso é improvável que você realmente precise
cd
fonte
Você pode usar:
De acordo com a página de manual do bash em
Tilde Expansion
:fonte