GNU/Linux >> Linux Esercitazione >  >> Linux

Puoi inserire più script eseguibili in una directory e, selezionando quella directory, rendere disponibili tutti quei comandi?

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)


Linux
  1. Comando Linux per elencare tutti i comandi e gli alias disponibili

  2. Come spostare (e sovrascrivere) tutti i file da una directory all'altra?

  3. Come posso premere Ctrl-Z e bg in un tasto per far continuare il processo in background?

  4. Come posso copiare in modo ricorsivo tutti i file pdf in una directory (e le sue sottodirectory) in un'unica directory di output?

  5. Puoi cambiare l'autorizzazione a tutti i file tranne una directory in Linux?

12 comandi divertenti di Linux che possono farti ridere

Quando si dovrebbe compilare e installare dal sorgente?

I migliori laptop Linux che puoi acquistare per uso domestico e in ufficio

comandi bash che non si adattano a una pagina:rendono l'output scorrevole

Puoi mostrare/elencare tutti gli attributi estesi e come?

Possiamo montare più dischi come una directory?