“Comando não encontrado” ao executar um script de shell. O que eu quebrei?

8

Estou no OSX Snow Leopard.

Aqui está o conteúdo completo de grr.sh:

#!/bin/sh

echo wow

Quando tento executá-lo no terminal:

$ grr.sh
-bash: grr.sh: command not found
$ /bin/sh grr.sh
wow
$ sh grr.sh
wow
$ bash grr.sh
wow

OK. Justo. Eu darei permissão executável e tente novamente:

$ chmod +x grr.sh
$ grr.sh
-bash: grr.sh: command not found
$ chmod 755 grr.sh
$ grr.sh
-bash: grr.sh: command not found

Hummm. Talvez funcione se eu usar o bash explicitamente? Vou mudar o conteúdo do arquivo para:

#!/bin/bash

echo wow

E eu recebo exatamente os mesmos resultados. O que eu poderia ter quebrado ?!

Uma última coisa! Caso você esteja curioso ...

$ which sh
/bin/sh
Cowboy de encerramento
fonte

Respostas:

19

Absolutamente nada. Somente executáveis ​​em um dos diretórios em $PATHpodem ser executados diretamente e, .geralmente (nunca) estão dentro $PATH. Especifique o caminho para o executável, ou seja ./grr.sh.

Ignacio Vazquez-Abrams
fonte
3
+1. Além disso, o diretório atual está no caminho nos sistemas Windows por padrão e tem maior prioridade. Essa diferença crucial é provavelmente a fonte da confusão do solicitante.
afrazier
Você foi o primeiro por 9 segundos! Obrigado!
Cowboy de fechamento
Você salvou o meu macbook
vietnguyen09
7

A localização do grr.sh está na $PATHvariável? Caso contrário, você precisará digitar:

./grr.sh

se você estiver na mesma pasta que grr.sh. Caso contrário, forneça o caminho completo para ele.

Cam Jackson
fonte
6

as permissões para o arquivo estão erradas. Tente os seguintes comandos:

  $ chmod 777 file.sh
  $ ./file.sh
tremonha
fonte
0

Sim, e o que ./grr.sh significa, é que neste diretório, execute o comando grr.sh. O solteiro . significa no diretório de trabalho. Caso contrário, seu shell assume que você está tentando executar um comando no seu $ PATH.

Nathan
fonte