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í.
Yo tuve el mismo problema. Resultó que el problema era / r / n finales de línea.
Para arreglarlo, hazlo.
tr -d "/r" < oldname.sh > newname.sh
De http://talk.maemo.org/showthread.php?s=1cadd53b369d5408c2b9d53580a32dc4&t=67836&page=2
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