Estoy tratando de ejecutar un script que está en un directorio para el que tengo derechos de administrador, pero estoy intentando ejecutarlo desde algún lugar que no sea el directorio ... I.E. es una carga generada en un script que lee todos los archivos en el directorio y da una salida basada en esos archivos. Pero cuando trato de llamarlo desde el terminal, no se ejecuta a menos que el directorio activo sea el directorio donde se encuentra el script, ¿es esto un problema de permisos?
He intentado ejecutarlo de esta manera:
sh /path/to/file/FILE
./path/to/file/FILE
pero cuando yo cd
al directorio y ejecutar
./FILE
funciona bien
Permisos para mi cuenta:
drwxrwxr-x 5 edennis edennis 4096 Nov 14 14:35 .
Permisos para script:
-rwxrwxr-x 1 edennis edennis 3644 Nov 14 11:45 zScript
Permisos para archivos de script está accediendo:
-rw-rw-r-- 1 edennis edennis 10437424 Oct 15 10:27 document.txt
Contenido del guión:
#!/bin/bash
for file in *.txt
do
echo "this is my favorite file " "$file" >> output.txt;
done
sh /path/to/file/FILE
y./path/to/file/FILE
no son equivalentes? El primero resolverá la ruta en relación con la raíz del sistema de archivos (/
), mientras que el segundo funcionará en relación con el directorio actual. Además, puedes saltarte../
Si no está ejecutando el script en un directorio actual.Respuestas:
El problema es que aún permanece en el directorio actual cuando ejecuta el script. Entonces, la línea
expandirá el globo (
*.txt
) a todos los archivos de texto en su directorio actual. Por supuesto, si su directorio actual ( no el directorio del script!) no tiene ningún archivo de texto, no obtendrá ningún resultado.Si desea cambiar al directorio del script desde dentro del script (lo que haría que el
*.txt
trabajo global), vea este post de desbordamiento de pila: ¿Puede un script de Bash decir en qué directorio está almacenado?Mientras estamos en ello, no te olvides de citar
"$file"
correctamente cuando lo usas para evitar que un nombre de archivo con espacios rompa tus comandos. No importa en tu caso porqueecho
No le importan los argumentos, pero es un buen hábito desarrollar.fuente