![Cuando cambio el directorio de trabajo en un script y lo ejecuto, el directorio de trabajo solo cambia a la ruta especificada mientras está en el script.](https://rvso.com/image/1575964/Cuando%20cambio%20el%20directorio%20de%20trabajo%20en%20un%20script%20y%20lo%20ejecuto%2C%20el%20directorio%20de%20trabajo%20solo%20cambia%20a%20la%20ruta%20especificada%20mientras%20est%C3%A1%20en%20el%20script..png)
Cuando cambio el directorio de trabajo en un script y lo ejecuto, el directorio de trabajo solo cambia a la ruta especificada mientras está en el script. Aquí está mi script: (esto fue para asegurarme de que realmente cambiara de directorio)
#!/bin/bash
cd /media/hard/drive/partitionX/
pwd
Cuando lo ejecuto, devuelve la ruta especificada, pero mi directorio de trabajo en la terminal no cambia. ¿Cómo cambio el directorio de trabajo en mi terminal a través de un script?
Respuesta1
Esto es normal. El directorio "actual" o "de trabajo" es un parámetro por proceso, y un proceso sólo puede cambiarsu propiodirectorio de trabajo. Los scripts independientes se ejecutan como un proceso de shell independiente y no pueden afectar al shell principal (de hecho, es posible que el shell principal no siempresercomo el infierno).
Necesitará utilizar funciones internas de su shell, como por ejemplo:
funciones de shell:
mycd() { cd /media/hard/drive/partitionX/; pwd; }
alias de shell:
alias mycd='cd /media/hard/drive/partitionX; pwd'
"obtener" un script en lugar de ejecutarlo:
. mycd.sh
Si tu objetivo principal es crear accesos directos a ciertos directorios, también puedes usar:
enlaces simbólicos en una ubicación más conveniente:
ln -s /media/hard/drive/partitionX ~/partX cd ~/partX
variables ($mydir):
mydir=/media/hard/drive cd $mydir
la característica $CDPATH:
CDPATH=".:/media/hard/drive" cd partitionX
Respuesta2
En realidad, descubrí, después de muchas búsquedas, que si necesita cambiar el directorio y aún mantener el mismo shell, para obtener todas las respuestas en su script actual, puede usar:
(cd your_dir; do_some_command_there)
Por ejemplo, lo que necesitaba usar era:
((cd your_dir; git remote -v | wc -l)
¡Funciona de maravilla!