Ejecutando el script bash fuera del directorio

3

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
user2612587
fuente
1
Te das cuenta que 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.
gronostaj

Respuestas:

1

El problema es que aún permanece en el directorio actual cuando ejecuta el script. Entonces, la línea

for file in *.txt

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 porque echo No le importan los argumentos, pero es un buen hábito desarrollar.

slhck
fuente