Réponses:
@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
.
Vous pouvez peut-être utiliser
cd $OLDPWD
mais dans ce cas, vous aurez besoin de plus de frappe :)
Mais vous aurez un avantage: s'il y a une erreur, le message ne sera pas redirigé vers / dev / null.
cd /tmp
bash
cd -
dit bash: cd: OLDPWD not set
au deuxième cd; tandis que la séquence cd /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 une cd
dans le shell en question, mais pas avant.
Rediriger stdout et stderr:
cd - &>/dev/null
la &>
version est la version courte de la main cd - 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 decd
$OLDPWD
n'est pas définie, cela vous déposera~
.cd -
affichera une erreur (et vous laissera probablement là où vous étiez déjà).