2011-02-07 24 views
16

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

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

Cuando ejecuto esto, yo no puede conseguir cd para poner a prueba

cd: 2: can't cd to /test 

¿Por qué es así?

+0

¿Cuál es su sistema operativo? ¿Tiene permisos de lectura en el directorio? No estoy seguro de qué decir, ya que nunca he visto esto antes. – Blender

+0

donde reside la prueba? ¿Lo ejecutará desde el directorio principal de prueba? –

+0

Ubuntu 10.10, sí, tengo permisos en el directorio – Abhishek

Respuesta

0

En caso de no utilizar

cd /test 

en su lugar? No conozco las secuencias de comandos de shell, pero puedo ver que su script particular es sensible al directorio actual.

+0

cuando dices cd test, estás buscando el subdirectorio de prueba del directorio actual –

+0

Lo probé como/test también ... no funciona :( – Abhishek

+0

@Foo: Sí, pero Abhi dice "no puedo copiar/probar", así que parece que no está usando un subdirectorio local. –

3

ponga pwd como la primera línea. Luego vea si ese directorio tiene un subdirectorio de prueba.

Parece que su funcionamiento desde el directorio raíz

+0

soy? ejecutarlo desde mi directorio y sí, tengo un subdirectorio de prueba. – Abhishek

+0

Su mensaje de error indica que se estaba ejecutando desde el directorio raíz '/'. lo que es la salida de 'pwd' cuando se ejecuta en la cáscara? –

0

Depende de donde el guión está siendo ejecutado desde, si el guión está en tu $ PATH, a continuación, se basa fuera del directorio actual que le dio el comando desde (directorio de trabajo).

Si se trata de un script que se ejecuta como un trabajo cron, es mejor utilizar una ruta de directorio completa.
Ejemplo:
cd/home/usuario/prueba

Dando la ruta completa también funcionará si el guión está en tu $ PATH.

+0

el directorio de trabajo actual de la ejecución será el directorio desde el que se inicia la secuencia de comandos, directorio no es el de la escritura –

+0

Eso es lo que dije, lo dije estará fuera de la base del directorio de donde se le dio la orden (en marcha). – KazW

0

2 es el error para "Ningún archivo o directorio". ¿Estás seguro de que el script test existe en el directorio de trabajo del script?

Es posible que desee cd a un directorio conocido "buena" y luego cd en conocidos niño directorios de ese buen directorio.

+0

el directorio del guión de trabajo será el directorio desde el que se inicia la secuencia de comandos. para probar, tienen una secuencia de comandos ejecutada 'pwd' –

+0

Y el directorio de trabajo de la script es donde empezarás desde cuando 'cd' a un directorio, ¿no es así? Entonces, si ejecuta el script desde un directorio que * no * tiene un directorio 'test', fallará. Una solución aquí es 'cd' con la ruta absoluta de' test', o su principal (dependiendo del resto de la secuencia de comandos), permitiendo que la secuencia de comandos se ejecute desde cualquier lugar. Que es lo que ya he declarado en su mayoría en esta respuesta. –

29

Tuve el mismo problema. Resultó que el problema era \ r \ n terminaciones de línea.

Para solucionarlo, haga

tr -d "\r" <oldname.sh> newname.sh 

De http://talk.maemo.org/showthread.php?s=1cadd53b369d5408c2b9d53580a32dc4&t=67836&page=2

+0

Gracias amigo! Esto realmente me estaba molestando. –

+0

Excelente. Tuve este problema al ejecutar Docker en el host de Windows y montar la carpeta de Windows como un directorio en el contenedor de Linux. Agregando este comentario con la esperanza de que sea indexado por los motores de búsqueda para gente como yo :) – Mchl

+0

Excelente respuesta ... gracias – Andrew

0

Bueno, yo tengo trabajo utilizando ""

Así que en su caso sería:

cd "test" 

/Marcus

1

Tuve este problema y estuve muy confundido por un tiempo.

Resulta que establecí mi variable de entorno $CDPATH, que normalmente permite que los comandos regulares cd funcionen de la forma habitual. Sin embargo, estaba ejecutando mi script en modo no interactivo, como "sh" (no "bash"), donde el comportamiento es un poco diferente.Parece que un comando como:

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

funcionará como se espera en mi intérprete interactivo de ingreso, golpe, incluso cuando se ajusta CDPATH. Sin embargo, cuando ejecuto el comando idénticos en una secuencia de comandos (usando sh), no pudo con

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

he modificado que sea una ruta relativa:

cd ./subdir 

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

Esta es mi conjetura. Cuando establezco/desinstalo CDPATH, se rompe/abre el comando cd subdir, y cd ./subdir funciona en todos los casos para mí.

2

No es realmente relevante para esta pregunta. Que tenía el mismo mensaje de error, sin embargo, yo estaba usando

cd ~/foo/bar 

Después de cambiar este a

cd $HOME/foo/bar 

fue fijado.

-1

asegurarse de que está en el directorio correcto

Ejecutar el comando abajo a sabido dónde estás

guiones
pwd 

Shell está ejecuta dentro de un subnivel, y cada subnivel tiene su propio concepto de lo que el el directorio actual es El cd tiene éxito, pero tan pronto como la subshell se cierra, vuelves a estar en el caparazón interactivo y nada cambia allí.

probar este

. myscript.sh 
Cuestiones relacionadas