Executando o script bash fora do diretório

3

Estou tentando executar um script que está em um diretório para o qual tenho direitos de administrador, mas estou tentando executá-lo de algum lugar que não seja o diretório. é uma carga de gerar no script que lê todos os arquivos no diretório e fornece uma saída baseada nesses arquivos. Mas quando eu tento chamá-lo do terminal, ele não roda, a menos que o diretório ativo seja o diretório onde o script está localizado, isso é um problema de permissões?

Eu tentei executá-lo desta maneira:

sh /path/to/file/FILE
./path/to/file/FILE

mas quando eu cd to directory and run

./FILE

corre bem.

Permissões para minha conta:

drwxrwxr-x 5 edennis edennis       4096 Nov 14 14:35 . 

Permissões para script:

-rwxrwxr-x 1 edennis edennis       3644 Nov 14 11:45 zScript

Permissões para o script de arquivos está acessando:

-rw-rw-r-- 1 edennis edennis   10437424 Oct 15 10:27 document.txt

Conteúdo do script:

#!/bin/bash

for file in *.txt

do

echo "this is my favorite file " "$file" >> output.txt;

done
    
por user2612587 14.11.2013 / 20:18

1 resposta

1

O problema é que você ainda permanece no diretório atual quando você executa o script. Então, a linha

for file in *.txt

expandirá o glob ( *.txt ) para todos os arquivos de texto em seu diretório atual. É claro que, se o seu diretório atual ( não diretório do script!) Não tiver arquivos de texto, você não obterá nenhuma saída.

Se você quiser mudar para o diretório do script a partir do script (o que tornaria o trabalho *.txt glob), consulte esta postagem sobre estouro de pilha: Pode um script Bash dizer em qual diretório está armazenado?

Enquanto estamos nisso - não se esqueça de citar "$file" corretamente quando você usa para evitar um nome de arquivo com espaços de quebrar seus comandos. Não importa no seu caso porque echo não se importa com os argumentos, mas é um bom hábito de se desenvolver.

    
por 14.11.2013 / 21:10

Tags