./myshell.sh
significa que o script myshell.sh
é encontrado no diretório atual . Se você executar esse script de algum outro lugar, não funcionará. Você poderia usar caminhos completos, mas, nesse caso, as únicas soluções sensatas são:
-
Adicionando a localização de
myshell.sh
ao seu$PATH
(no caso,myshell.sh
é realmente algo que deve ser chamado de qualquer lugar). Então, adicionePATH="$PATH":/dir/of/myshell
no início do script externo. -
Coloque
myshell.sh
em algum lugar para que seja acessível de qualquer lugar (assim como todos os outros executáveis no sistema). Isso seria/usr/local/bin
mais provável. Use isso somente se esse script for universalmente útil.
Se os scripts dependem de arquivos locais em seu diretório (e podem até quebrar e causar danos se chamados de outro lugar), você deve deixá-lo no formulário atual (isso na verdade impede que você os chame de lugares onde você está não deveria), ou use cd
dentro do script para chegar ao local apropriado. Tenha cuidado, use caminhos absolutos em scripts de shell para cd
, é muito fácil quebrar coisas se algo der errado e você sair ..
e cd
-em mais falhar, você pode escapar do diretório e reinar caos em todos os diretórios pais.
Principalmente, eu recomendaria a solução nº 1.