Respuestas:
@erewok ya respondió la pregunta , pero intentaré explicar qué está sucediendo realmente y por qué está viendo el comportamiento que hace.
El problema es con tu redirección. Estas escribiendo:
cd - 2>&1 /dev/null
que debido a que las redirecciones pueden aparecer en cualquier lugar dentro de la línea de comando (puede confirmarlo usted mismo con algo simple como echo a b 2>&1 c </etc/fstab d
), después de que las redirecciones se eliminan, en realidad se convierte en:
cd - /dev/null
¿Ves el problema? Está pasando dos argumentos a cd
, no un argumento y dos redirecciones. Como solo puede estar en un directorio actual a la vez, cd
solo considera su primer argumento, que en este caso es el -
.
Lo que probablemente pretendía escribir es un cd
comando con redirección de stderr y stdout a / dev / null. Hay dos maneras de hacerlo.
Lo más fácil en su caso sería simplemente informar al shell que desea la redirección, agregando un >
carácter. Esto es lo que sugiere @erewok.
cd - 2>&1 >/dev/null
Esto primero redirige stderr (descriptor de archivo 2) al descriptor de archivo 1 (stdout), luego redirige stdout (implícito 1) a / dev / null. Tenga en cuenta que el orden es importante; no obtendrá el mismo resultado si invierte las redirecciones, aunque en algunos casos puede parecer que lo hace debido a cómo el programa en particular usa los flujos de salida respectivos.
Alternativamente, como ha sugerido @demure , puede utilizar &>
para redirigir ambas secuencias a la vez si su shell admite esta sintaxis.
cd - &>/dev/null
Tenga en cuenta que cualquiera de estas alternativas también silenciará el error cuando $OLDPWD
ya no exista, ya que está redirigiendo la salida de error estándar al agujero negro del sistema. Si esto es una preocupación, lo comprobaría $?
después; debe confirmar esto usted mismo si es una preocupación real, pero al menos en mis pruebas, un error cd
(si cd $someplace
o no cd -
) se establece $? = 1
después del éxito $? = 0
.
Tal vez puedas usar
cd $OLDPWD
pero en este caso necesitarás escribir más :)
Pero tendrá una ventaja: si hay algún error, el mensaje no se redirigirá a / dev / null.
cd /tmp
bash
cd -
dice bash: cd: OLDPWD not set
en el segundo CD; mientras que la secuencia cd /tmp
bash
cd $OLDPWD
lo lleva a ~ (casi con certeza porque $ OLDPWD se expande a una cadena vacía). cd $OLDPWD
funcionará bien una vez que haya hecho al menos uno cd
dentro del shell en cuestión, pero no antes.
$OLDPWD
está configurado, esto te dejará caer~
.cd -
imprimirá un error (y presumiblemente lo dejará donde ya estaba).