Certifique-se de que o seu script comece com a #!
-line apropriada.
Se um script for executável e começar com, por exemplo,
#!/bin/bash
(ou qualquer que seja o caminho para bash
em seu sistema), então o script será interpretado por /bin/bash
se você digitou sudo script
, assim como um script Python seria interpretado por /usr/bin/python
se sua primeira linha foi #!/usr/bin/python
.
A questão se sh
é bash
ou algum outro shell é desinteressante aqui. Em geral, assume que cada tipo de shell é sua própria linguagem de script mutuamente exclusiva e usa a #!
-line para especificar exatamente qual interpretador você escreveu o script. Se você, por exemplo, escrever um script portátil usando apenas a gramática e sintaxe POSIX, use #!/bin/sh
, mas use #!/bin/bash
se você usar as matrizes de bash
ou outras coisas com as quais este shell estende o shell POSIX.
Quando um arquivo de texto não inicia com #!
, /bin/sh
é usado como fallback. Isso não tem nada a ver com sudo
.
Na sua pergunta atualizada, você exibe várias invocações de um script sem #!
-line. Todos eles falham porque o interpretador não entende o comando source
( source: not found
) ou porque não consegue encontrar o arquivo ( something: No such file or directory
).
Para resumir: Sempre especifique o interpretador para scripts usando uma #!
-line.
Além disso: Ao usar source
, especifique o caminho para o arquivo a ser usado, mesmo que seja apenas ./something
, caso contrário, ele pode ser selecionado em algum lugar em $PATH
.
Relacionados: