@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
.
$OLDPWD
está configurado, esto te dejará caer~
.cd -
imprimirá un error (y presumiblemente lo dejará donde ya estaba).cd /tmp
bash
cd -
dicebash: cd: OLDPWD not set
en el segundo CD; mientras que la secuenciacd /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 unocd
dentro del shell en cuestión, pero no antes.Redirigir stdout y stderr:
cd - &>/dev/null
esta
&>
es la versión abreviada decd - 2>/dev/null 1>&2
, que creo que querías usar ...&>
necesita bash> = 4.0.PD. la mayoría de los comandos pueden apuntar a ubicaciones, por lo que es poco probable que realmente necesite
cd
fuente
Puedes usar:
De acuerdo con la página de manual de bash debajo
Tilde Expansion
:fuente