Chci vložit spoustu spustitelných skriptů do adresáře .command (který je také spustitelný) a pak musím pouze vytvořit tento adresář v mém .bash_profile. Je to možné? Dokážu to zprovoznit s jedním souborem. Ale když přidáváte druhý soubor, příkazy druhého souboru nejsou v shellu dostupné.
můj .bashprofile
source ~/.commands/*
moje složka .commands
-rwxr-xr-x 1 christopherreece staff 108 Dec 14 08:55 server_utils.sh
-rwxr-xr-x 1 christopherreece staff 23 Dec 14 09:04 short
obsah zkratky
echo 'a short program'
soutěže server_utils.sh
function upfile {
scp $1 [email protected]:~/
}
Vstup a výstup shellu.
$ hello
hello
$ short
-bash: short: command not found
Přijatá odpověď:
Nemůžete to udělat s jedním source
. První argument se bere jako název souboru, ostatní se zobrazují jako poziční parametry $1
, $2
… ve zdrojovém skriptu.
$ cat test.src
echo hello $1
$ source test.src there
hello there
Ale můžete to udělat pomocí smyčky:
for f in ~/commands/*.src; do
source "$f"
done
(Mimochodem, mít takové věci, které obsahují pouze soubory s určitou příponou, je docela užitečné, pokud používáte editor, který ponechává záložní soubory s koncovým ~
. Záložní kopie se pak náhodně neaktivují.)
Všimněte si však, že pokud máte zdrojový skript, který obsahuje jednoduché příkazy (například echo
výše nebo vaše short
), budou spuštěny, když je skript source
d. Negenerují žádné funkce v zdrojovém prostředí.
$ cat test2.src
echo "shows when sourced"
func() {
echo "shows when function used"
}
$ source test2.src
shows when sourced
$ func
shows when function used
Pokud chcete mít místo toho spustitelné skripty, tedy druh, kde se skript spustí, když zadáte jeho název jako příkaz, vložte je někam do PATH
(Doporučuji použít ~/bin
za to), dejte jim oprávnění ke spuštění a vložte správné hashbangy na začátek skriptů (#!/bin/sh
nebo #!/bin/bash
nebo cokoliv)