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, cdsolo considera su primer argumento, que en este caso es el -.
Lo que probablemente pretendía escribir es un cdcomando 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 $OLDPWDya 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 $someplaceo no cd -) se establece $? = 1despué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 seten el segundo CD; mientras que la secuencia cd /tmp bash cd $OLDPWDlo lleva a ~ (casi con certeza porque $ OLDPWD se expande a una cadena vacía). cd $OLDPWDfuncionará bien una vez que haya hecho al menos uno cddentro del shell en cuestión, pero no antes.
$OLDPWDestá configurado, esto te dejará caer~.cd -imprimirá un error (y presumiblemente lo dejará donde ya estaba).