Alguém pode me explicar o que o shell faz nos dois exemplos A) e B) abaixo? Obviamente, ele se comporta de maneira diferente, mas não consigo descobrir por que a saída é diferente.
Exemplo:
Vamos ter um script em nosso diretório atual nomeado bla.sh
com apenas um comando:
echo ${0##/*} hello
A)
Começou como: ./bla.sh
dá:./bla.sh hello
B)
Iniciado como: . bla.sh
dá:-bash hello
Como eu uso isso em um script, a segunda saída (por causa do "-" na frente do -bash) mata o comando. Claro, um simples --
antes do ${...}
ajudou, mas eu adoraria entender o que causa a saída em primeiro lugar.
Eu amo bash. E vi [m]. Mas eu discordo ...
source
é um alias do bash para.
, não o contrário esource
não funcionará em outros shells../<cmd>
executará o<cmd>
programa que reside no diretório atual em um novo processo (bifurcado). Tem que ser executável. E também legível começa com#!
.. <cmd>
fará com que seu shell atual execute o script do shell<cmd>
que reside no seu$PATH
diretório ou no atual no processo atual do shell. Tem que ser legível. É um alias para o comando shellsource
.fonte
. <cmd>
procurará o programa$PATH
e, se não for encontrado, procurará o diretório atual.. ./cmd
./cmd
usa caminho explícito (./
- dir atual) para executável. E não é necessário que comece com#!
.. cmd
- (akasource
) - comando bash builtin. Uma diferença visível da execuçãosource
é que ele pode definir / modificar a variável de ambiente do shell atual.fonte
source
é um nome alternativo só de festa para.
(que é o padrão)