
Tenho um script fish que exporta algumas variáveis e lança um comando no final. Eu gostaria de poder obter esse arquivo para trazer essas variáveis para a sessão atual do shell, mas sem executar o comando no final.
A questão: Posso descobrir se o arquivo atual está sendo executado ou originado dentro do arquivo?
Responder1
Você pode usar a $_
variável de ambiente para ver se o seu script está sendo “executado” pelo source
comando:
#!/bin/fish
if test "$_" = source
echo got sourced
else
echo was execed
end
Responder2
Você pode usar a $_
variável de ambiente para ver se o seu script está sendo “executado” pelo source
comando. Observe que o source
comando tem um alias comum (" .
"), portanto você deve verificar a $_
variável de ambiente em relação a source
e .
.
#!/bin/fish
if test "$_" != "source" -a "$_" != "."
echo "not sourced"
else
echo "was sourced"
end
Um uso comum disso pode ser avisar o usuário, se o script não tiver sido originado:
if test "$_" != "source" -a "$_" != "."
echo "Run this script with \". ./activate.fish\" (aka: \"source ./activate.fish\")."
exit 1
end
Substitua activate.fish
pelo nome do seu script, é claro.
Responder3
Acho que você não entendeu o que a "fonte" de um script faz. Geralmente, a execução de um script o executará em um processo separado. Fornecê-lo irá executá-lo noshell atual. Ele ainda executará cada linha.
Provavelmente o que você deseja fazer é filtrar a última linha. Tentar:
source (sed '$d' filename | psub)
O psub
comando é usado para tratar a saída de algum processo como se fosse um arquivo.Documentação