@erewok a déjà répondu à la question , mais je vais essayer d' expliquer ce qui se passe réellement et pourquoi vous voyez le comportement que vous faites.
Le problème vient de votre redirection. Tu écris:
cd - 2>&1 /dev/null
parce que les redirections peuvent apparaître n'importe où dans la ligne de commande (vous pouvez le confirmer vous-même avec quelque chose de simple comme echo a b 2>&1 c </etc/fstab d
), après que les redirections soient supprimées devient en fait:
cd - /dev/null
Vous voyez le problème? Vous passez deux arguments à cd
, pas un argument et deux redirections. Étant donné que vous ne pouvez être que dans un seul répertoire en cours à la fois,cd
ne considère que son premier argument, qui dans ce cas est le -
.
Qu'est - ce que vous avez probablement l' intention d'écrire est une cd
commande avec redirection de stderr et stdout vers / dev / null. Il y a deux façons de procéder.
Le plus simple dans votre cas serait d'informer simplement le shell que vous souhaitez la redirection, en ajoutant un >
caractère. C'est ce que propose @erewok.
cd - 2>&1 >/dev/null
Cela redirige d'abord stderr (descripteur de fichier 2) vers le descripteur de fichier 1 (stdout), puis redirige stdout (implicite 1) vers / dev / null. Notez que la commande est importante; vous n'obtiendrez pas le même résultat si vous inversez les redirections, bien que dans certains cas, cela puisse apparaître en raison de la façon dont le programme particulier utilise les flux de sortie respectifs.
Alternativement, comme l'a suggéré @demure , vous pouvez utiliser &>
pour rediriger les deux flux à la fois si cette syntaxe est prise en charge par votre shell.
cd - &>/dev/null
Notez que l'une de ces alternatives réduira également le silence à l'erreur lorsqu'elle $OLDPWD
n'existe plus, car vous redirigez la sortie d'erreur standard dans le trou noir du système. Si c'est un problème, je vérifierai $?
après; vous devez le confirmer vous-même si c'est vraiment un problème, mais au moins dans mes tests, un échec cd
(que ce cd $someplace
soit cd -
) se déclenche $? = 1
après le succès $? = 0
.
$OLDPWD
n'est pas définie, cela vous déposera~
.cd -
affichera une erreur (et vous laissera probablement là où vous étiez déjà).cd /tmp
bash
cd -
ditbash: cd: OLDPWD not set
au deuxième cd; tandis que la séquencecd /tmp
bash
cd $OLDPWD
vous place dans ~ (presque certainement parce que $ OLDPWD se développe en une chaîne vide).cd $OLDPWD
fonctionnera bien une fois que vous en aurez fait au moins unecd
dans le shell en question, mais pas avant.Rediriger stdout et stderr:
cd - &>/dev/null
la
&>
version est la version courte de la maincd - 2>/dev/null 1>&2
, que je ce que je pense que vous vouliez dire à utiliser ...&>
nécessite bash> = 4.0.Ps. la plupart des commandes peuvent être pointées vers des emplacements, il est donc peu probable que vous ayez réellement besoin de
cd
la source
Vous pouvez utiliser:
Selon la page de manuel bash sous
Tilde Expansion
:la source