script change linux shell cd

linux - change - "Cd" no funciona en shell script



cd linux (9)

Asegúrate de estar en el directorio correcto

Ejecuta el siguiente comando para saber dónde estás.

pwd

Los scripts de shell se ejecutan dentro de una subshell, y cada subshell tiene su propio concepto de lo que es el directorio actual. El cd tiene éxito, pero tan pronto como la subshell sale, estás de vuelta en la shell interactiva y nada cambia allí.

Prueba esto

. myscript.sh

Me pregunto por qué cd no funciona en shell script. Es como sigue,

#!/bin/sh cd test mkdir $(date +%d-%mm-%Y)

Cuando ejecuto esto, no puedo cd para probar

cd: 2: can''t cd to /test

¿Por qué es como este?


Bueno lo tengo funcionando usando ""

Así que en tu caso sería:

cd "test"

/ Marcus


Depende de dónde se esté ejecutando el script, si el script está en su $ PATH, entonces se basará en el directorio actual desde el que dio el comando (directorio de trabajo).

Si este es un script que se ejecuta como un trabajo cron, es mejor usar una ruta de directorio completa.
Ejemplo:
cd / home / user / test

Dar la ruta completa también funcionará si el script está en su $ PATH.


No deberias usar

cd /test

¿en lugar? No conozco los scripts de shell, pero puedo ver que su script en particular es sensible al directorio actual.


No es realmente relevante para esta pregunta. Tuve el mismo mensaje de error, sin embargo, estaba usando

cd ~/foo/bar

Después de cambiar esto a

cd $HOME/foo/bar

fue arreglado


Tuve este problema, y ​​estaba muy confundido por un tiempo.

Resulta que había configurado mi variable de entorno $CDPATH , que normalmente permite que los comandos regulares de cd funcionen como siempre. Sin embargo, estaba ejecutando mi script en modo no interactivo, como "sh" (no "bash"), donde el comportamiento es un poco diferente. Parece que una orden como:

cd subdir # works via interactive bash; not in script run via sh.

funcionará como se espera en mi shell de inicio de sesión interactivo, bash, incluso cuando CDPATH está configurado. Sin embargo, cuando ejecuto el comando idéntico en un script (usando sh ), falló con

myscript.sh: line 9: cd: subdir: No such file or directory

Lo modifiqué para que fuera un camino relativo:

cd ./subdir

¡y funciona! Creo que la diferencia está en cómo el shell utiliza CDPATH . En un caso, busca tanto en CDPATH como en su directorio actual, pero en el script solo busca en CDPATH . Esto es similar al comportamiento de PATH . Si te vas (el directorio actual) fuera de su PATH , entonces debe escribir ./localbinary lugar de solo localbinary para ejecutar ese archivo.

Esta es mi conjetura educada. Cuando configuro / desactivo CDPATH , rompe / desbloquea el comando cd subdir , y cd ./subdir funciona en todos los casos para mí.



2 es el error de "No hay tal archivo o directorio". ¿Está seguro de que la test script existe en el directorio de trabajo del script?

Es posible que desee cd a un directorio "bueno" conocido primero y luego cd en directorios secundarios conocidos de ese directorio bueno.


pwd como primera línea. A continuación, ver si ese directorio tiene un subdirectorio de prueba.

Parece que se está ejecutando desde el directorio raíz