Voglio inserire un sacco di script eseguibili nella directory .command (che è anche eseguibile), e quindi devo solo reperire quella directory nel mio .bash_profile. È possibile? Posso farlo funzionare con un file. Ma quando si aggiunge un secondo file, i comandi del secondo file non sono disponibili nella shell.
il mio .bashprofile
source ~/.commands/*
la mia cartella .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
contenuti di breve
echo 'a short program'
concorsi di server_utils.sh
function upfile {
scp $1 [email protected]:~/
}
Input e output della shell.
$ hello
hello
$ short
-bash: short: command not found
Risposta accettata:
Non puoi farlo con un source
. Il primo argomento viene preso come nome del file, gli altri vengono visualizzati come parametri posizionali $1
, $2
... nello script di origine.
$ cat test.src
echo hello $1
$ source test.src there
hello there
Ma potresti farlo con un ciclo:
for f in ~/commands/*.src; do
source "$f"
done
(Per inciso, avere cose del genere che includono solo file con una certa estensione è abbastanza utile se usi un editor che lascia i file di backup con un ~
finale . Le copie di backup non diventano attive accidentalmente, quindi.)
Tuttavia, tieni presente che se hai uno script di origine che contiene comandi semplici (come quello echo
sopra o il tuo short
), verranno eseguiti quando lo script è source
d. Non generano alcuna funzione nella shell di sourcing.
$ 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 invece vuoi avere script eseguibili, del tipo in cui lo script viene eseguito quando gli dai il nome come comando, mettili da qualche parte in PATH
(Suggerirei di usare ~/bin
per questo), dai loro il permesso di esecuzione e metti gli hashbang appropriati all'inizio degli script (#!/bin/sh
o #!/bin/bash
o altro)