¿Es posible cambiar el directorio actual de un script?
Quiero crear una utilidad para la navegación de directorios en Bash. He creado un script de prueba que se parece a lo siguiente:
#!/bin/bash
cd /home/artemb
Cuando ejecuto el script desde el shell Bash, el directorio actual no cambia. ¿Es posible cambiar el directorio de shell actual de un script?
bash
environment
artemb
fuente
fuente
pushd
(posiblemente redirigido a>/dev/null
para suprimir su salida) en lugar decd
, puede volver al directorio anterior conpopd
.Respuestas:
Necesita convertir su script a una función de shell:
La razón es que cada proceso tiene su propio directorio actual, y cuando ejecuta un programa desde el shell, se ejecuta en un nuevo proceso. Los estándares "cd", "pushd" y "popd" están integrados en el intérprete de shell para que afecten el proceso de shell.
Al hacer que su programa sea una función de shell, está agregando su propio comando en proceso y luego cualquier cambio de directorio se refleja en el proceso de shell.
fuente
Cuando inicia su script, se crea un nuevo proceso que solo hereda su entorno. Cuando termina, termina. Su entorno actual se mantiene como está.
En su lugar, puede iniciar su secuencia de comandos de esta manera:
La
.
evaluará la secuencia de comandos en el entorno actual, por lo que podría ser alteradofuente
.sh
extensiones son totalmente eww. No los uses.A la luz de la ilegibilidad y la complicación excesiva de las respuestas, creo que esto es lo que el solicitante debe hacer
PATH
. scriptname
El
.
(punto) se asegurará de que el script no se ejecute en un shell secundario.fuente
Poniendo todo lo anterior junto, puedes hacer un alias
si no quieres escribir el "" principal cada vez que desee obtener su script para el entorno de shell, o si simplemente no desea recordar que debe hacerse para que el script funcione correctamente.
fuente
~/.bash_aliases
no siempre se obtiene cuando se inicia Bash.Si está utilizando bash, puede probar alias:
en el archivo .bashrc agregue esta línea:
cuando escribe "p" en la línea de comando, cambiará el directorio.
fuente
Si ejecuta un script bash, funcionará en su entorno actual o en el de sus hijos, nunca en el padre.
Si el objetivo es ejecutar su comando: goto.sh / home / test Luego trabajar de forma interactiva en / home / test, una forma es ejecutar un subshell interactivo bash dentro de su script:
De esta manera, estará en / home / test hasta que salga (salir o Ctrl + C) de este shell.
fuente
Con pushd, el directorio actual se inserta en la pila de directorios y se cambia al directorio dado, popd obtiene el directorio en la parte superior de la pila y luego cambia a él.
fuente
Simplemente ve a
y agregue este código al lado de la última línea:
Luego salga del editor.
Luego escriba:
ahora puede usar: su comando en la terminal
fuente
He hecho un script para cambiar el directorio. echa un vistazo: https://github.com/ygpark/dj
fuente
Básicamente, usamos
cd..
para volver de cada directorio. Pensé en hacerlo más fácil dando la cantidad de directorios con los que necesita volver a la vez. Puede implementar esto usando un archivo de script separado usando el comando alias. Por ejemplo:code.sh
Después de usar
source code.sh
en el shell actual, puede usar:regresar dos pasos desde el directorio actual. Explicado en detalle por aquí . También se explica allí cómo poner el código en ~ / .bashrc para que cada nuevo shell abierto tenga automáticamente este nuevo comando de alias. Puede agregar un nuevo comando para ir a directorios específicos modificando el código agregando más
if conditions
y diferentes argumentos. También puede extraer el código de git aquí .fuente
Este enfoque es más fácil para mí.
Suponga que en un iMac personal donde es administrador, bajo el directorio predeterminado cuando se abre una ventana de comando, / Users / jdoe, este será el directorio para ir a: /Users/jdoe/Desktop/Mongo/db.3.2.1 /compartimiento.
Estos son los pasos que pueden hacer el trabajo:
cd /Users/jdoe/Desktop/Mongo/db.3.2.1/bin
como la primera línea.chmod 755 mongobin
source mongobin
pwd
Voila!
fuente
También he creado una utilidad llamada cabra que puedes usar para facilitar la navegación.
Puede ver el código fuente en GitHub .
A partir de v2.3.1, el resumen de uso se ve así:
fuente
Me gusta hacer lo mismo para diferentes proyectos sin activar un nuevo shell.
En tu caso:
Guarde the_script como:
Luego enciéndelo con:
Luego llegas al directorio usando el mismo shell.
fuente
Agregue debajo de la línea de CD en su shellscript esto:
fuente
Declara tu camino:
fuente
Simplemente escriba
PWD
y expórtelo dentro de su script, y el cambio persistirá.fuente