Eu tenho um script que está espalhado pelo meu sistema de arquivos (efeito colateral de um processo de compilação) que define algumas variáveis de ambiente global (LD_LIBRARY_PATH, PATH, ROOTDIR etc.) que precisam estar no meu shell para uma operação adequada. Obviamente, isso significa que eu preciso source script.sh
ou . script.sh
fazê-lo funcionar, e não ./script.sh
(o que geraria um novo shell e não definiria as variáveis no meu shell atual).
Existe algo que eu possa adicionar ao script para impedir (ou avisar) alguém em execução ./script.sh
?
Outra opção pode ser remover permissões de execução. Nesse caso, não pode ser executado, mas ainda pode ser originado.
fonte
bash script
independentemente do sinalizador de execução em um script. Também em Cygwin (isso conta?), Você não pode remover as bandeiras de execução.Além de marcar $ 0 ( resposta Mikel ), pode ser útil alterar a extensão de .sh para .src, por exemplo. Isso ajudará a entender quem não deve executar esse script.
fonte
Crie um intérprete personalizado
source_reminder
:Não se esqueça de torná-lo executável. Em seguida, basta usá-lo em seu script:
Agora, se você executar o script sem fonte, o lembrete fará seu trabalho.
fonte
#!/bin/echo do not execute
ou#!/bin/false
ou#!/usr/bin/awk BEGIN { print "you must source " ARGV[1]; exit(1) }
. No entanto, isso não ocorre no caso em que o script é executado com algo parecidosh script
(pois isso ignora o Shebang).