Você não pode fazer isso com um source
. O primeiro argumento é tomado como o nome do arquivo, os outros aparecem como os parâmetros posicionais $1
, $2
... no script de origem.
$ cat test.src
echo hello $1
$ source test.src there
hello there
Mas você poderia fazer isso com um loop:
for f in ~/commands/*.src; do
source "$f"
done
(Como um aparte, ter coisas desse tipo incluem apenas arquivos com uma certa extensão é bastante útil se você usar um editor que deixa os arquivos de backup com um ~
. As cópias de backup não ficam ativas acidentalmente , então.)
No entanto, se você tiver um script de origem que contenha comandos simples (como echo
acima ou short
), eles serão executados quando o script for source
d. Eles não geram nenhuma função no shell de fornecimento.
$ cat test2.src
echo "shows when sourced"
func() {
echo "shows when function used"
}
$ source test2.src
shows when sourced
$ func
shows when function used
Se você quiser ter scripts executáveis, o tipo em que o script é executado quando você der seu nome como um comando, coloque-os em algum lugar em PATH
(sugiro usar ~/bin
para isso), dê a eles executar permissão e colocar hashbangs apropriados no início dos scripts ( #!/bin/sh
ou #!/bin/bash
ou qualquer outra coisa)