Tengo un comando común que se llama desde directorios muy específicos. Solo hay un ejecutable en / bin para este programa, y el directorio de trabajo actual es muy importante para ejecutarlo correctamente. El script afecta a los archivos que viven dentro del directorio en el que se ejecuta.
Ahora, también tengo un script de shell personalizado que hace algunas cosas en un directorio, pero necesito llamar al comando mencionado anteriormente como si estuviera en otro directorio.
¿Cómo se hace esto en un script de shell?
bash
shell
working-directory
Marty Wallace
fuente
fuente
Respuestas:
Puede utilizar las
cd
funciones incorporadas opushd
ypopd
para este propósito. Por ejemplo:# do something with /etc as the working directory cd /etc : # do something with /tmp as the working directory cd /tmp :
Puede utilizar las funciones integradas como cualquier otro comando y puede cambiar el contexto del directorio tantas veces como desee en un script.
fuente
cd -
un shell POSIX para volver al directorio anterior. Dicho esto, (a)pushd
ypopd
están realmente diseñados para uso interactivo, y (b) no siempre es seguro asumir que puedecd
retroceder donde comenzó, especialmente en subsistemas complejos que pueden usar permisos restrictivos internamente (consulte stackoverflow.com/questions/ 10555284 /… ).popd
.:
símbolo aquí?man bash
lecturas:: [arguments]
Sin efecto; el comando no hace nada más que expandir argumentos y realizar cualquier redirección especificada. El estado de devolución es cero.Utilizar
cd
en una subcapa; la forma abreviada de utilizar este tipo de subcapa es el paréntesis.(cd wherever; mycommand ...)
Dicho esto, si su comando tiene un entorno que requiere, realmente debería asegurarse de que el entorno en sí mismo en lugar de poner la responsabilidad en cualquier cosa que quiera usarlo (a menos que sea un comando interno usado en circunstancias muy específicas en el contexto de un pozo definido un sistema más grande, de modo que cualquier persona que llama ya necesita garantizar el entorno que requiere). Por lo general, esto sería algún tipo de envoltorio de script de shell.
fuente
\
después de cada uno;
para comandos de varias líneas dentro del mismo contexto.(cd /path/to/your/special/place;/bin/your-special-command ARGS)
fuente
Si desea volver a su directorio de trabajo actual:
current_dir=$PWD;cd /path/to/your/command/dir;special command ARGS;cd $current_dir;
current_dir
igual a supwd
cd
a donde necesita ejecutar su comandocd
volveremos a nuestra variablecurrent_dir
Otra solución de @apieceofbart
pushd && YOUR COMMAND && popd
fuente
pushd && YOUR COMMAND && pulld
popd
lugar depulld
.