Um script bash / zsh não está sendo chamado a partir de um terminal no FreeBsd, nem no bash nem no zsh

0

Eu tenho um script no FreeBsd 11

% cat my_script.sh 
#!/usr/local/bin/zsh

# [........]

Tem x attribute:

-rwxr-xr--   1 root  wheel  669 Jun 14 02:45 my_script.sh

Meu shell é zsh . Quando estou tentando executá-lo, recebo um erro. Tem a ver com a maneira como estou invocando:

% sudo ./my_script.sh var1                  
sudo: ./my_script.sh: command not found


% sudo my_script.sh var1 
sudo: my_script.sh: command not found


% sudo source my_script.sh var1
sudo: source: command not found

Qual é o problema?

update:

Eu mudei meu shell para bash, reiniciei, mudei o #! para o bash e agora eu tenho:

$ sudo ./my_script.sh test9
sudo: ./my_script.sh: command not found
    
por Jodimoro 14.06.2017 / 04:54

2 respostas

2

% sudo ./my_script.sh var1                  
sudo: ./my_script.sh: command not found

Esta mensagem indica que o arquivo ./my_script.sh não existe ou seu carregador não existe . Para um script, o carregador é o executável mencionado na linha shebang .

Verifique se o /usr/local/bin/zsh existe e se não é um link simbólico quebrado.

Verifique se o arquivo realmente contém #!/usr/local/bin/zsh como primeira linha e não, digamos #!/usr/local/bin/zsh com alguns espaços em branco ou caracteres invisíveis depois dele ou no meio. Observe, em particular, que um retorno de carro é um dos caracteres invisíveis que poderiam quebrar as coisas. Você acabaria com um CR se você criasse (ou talvez se você tivesse editado) o script no Windows; se você editar scripts no Windows, verifique se eles estão salvos com os finais de linha configurados como “LF” ou “Unix” ou “Linux” ou qualquer que seja o nome do seu editor.

% sudo my_script.sh var1 
sudo: my_script.sh: command not found

Este não funciona por um motivo simples: myscript.sh não está no caminho de pesquisa do comando .

% sudo source my_script.sh var1
sudo: source: command not found

Este não funciona por um motivo simples: source é um shell embutido, não é um executável. (Não faria sentido como executável, já que seu propósito é executar algum código de shell no shell atual - somente um shell pode fazer isso.)

Qual shell que você está executando atualmente é irrelevante para todos os três comandos.

    
por 15.06.2017 / 02:59
0

O problema é que sudo não tem garantia de manter seu diretório atual ou seu PATH .

Assim, para ter certeza de que os scripts serão encontrados, especifique o caminho completo:

sudo /path/to/my_script.sh

O mesmo erro também aparece para sudo source porque source é um shell interno, não um arquivo. Em vez de usar um shell, sudo executa seus argumentos usando execev , que espera um arquivo.

Para mais informações, consulte man sudo (particularmente a seção Modelo de processo e as opções -E e -s ) e para opções de configuração, consulte man sudoers e /etc/sudoers .

Para muitas outras opções sobre como especificar o caminho para seu script com sudo , consulte link

    
por 14.06.2017 / 16:02