A execução do arquivo sh funciona somente se o cd'd for para o diretório de scripts

0

Estou tentando executar um arquivo .sh pela sintaxe ./file.sh . Eu, erroneamente, pensei que seria possível executar:

./usr/bin/foo/bar.sh

que apenas produz "No such file or directory" . No entanto, se eu correr:

cd /usr/bin/foo && ./bar.sh

Funciona perfeitamente. Por que a primeira abordagem não é possível?

(estou usando o Lubuntu 14)

    
por Zar 14.02.2015 / 22:53

3 respostas

2

no início de um caminho de diretório significa que é um caminho relativo começando no diretório de trabalho atual. Sem o. Começa na raiz do sistema de arquivos.

Portanto, você teria que executar /usr/bin/foo/bar.sh sem um ponto precedente.
O ponto só é necessário quando você está localizado no mesmo diretório que o arquivo para distingui-lo de um arquivo eventualmente existente com o mesmo nome em / bin, que pode ser executado de qualquer lugar sem adicionar um diretório.

    
por 14.02.2015 / 23:00
2

Pontos importam.

Em vez de:

./usr/bin/foo/bar.sh

Uso:

/usr/bin/foo/bar.sh

Discussão

Considere:

./usr/bin/foo/bar.sh

Isso inicia no diretório atual , ./ e procura o subdiretório usr . Se o diretório atual não contiver esse subdiretório, você verá a mensagem:

bash: ./usr/bin/foo/bar.sh: No such file or directory

Por contraste, considere:

cd /usr/bin/foo && ./bar.sh

Isso ignora completamente o diretório atual e os cd's para /usr/bin/foo .

    
por 14.02.2015 / 22:57
0

. significa o diretório atual. Basta executá-lo assim:

/usr/bin/foo/bar.sh

Quando você coloca um . antes de procurar:

whateverdirectory/yourein/usr/bin/foo/bar.sh
    
por 14.02.2015 / 23:28