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
cdfunciones incorporadas opushdypopdpara 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)pushdypopdestán realmente diseñados para uso interactivo, y (b) no siempre es seguro asumir que puedecdretroceder donde comenzó, especialmente en subsistemas complejos que pueden usar permisos restrictivos internamente (consulte stackoverflow.com/questions/ 10555284 /… ).popd.:símbolo aquí?man bashlecturas:: [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
cden 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_dirigual a supwdcda donde necesita ejecutar su comandocdvolveremos a nuestra variablecurrent_dirOtra solución de @apieceofbart
pushd && YOUR COMMAND && popdfuente
pushd && YOUR COMMAND && pulldpopdlugar depulld.