GNU/Linux >> Linux Esercitazione >  >> Linux

Funziona "exec Echo Some; Echo Test" In Bash non stampare mai "qualche prova"?

L'esecuzione di exec echo "some "; echo "test" in bash non stampi mai "qualche prova"?

Cercherei conferma a questa domanda, poiché sto scrivendo un piccolo script di shell e vorrei che non continuasse a fare nulla dopo exec comando è stato chiamato.

Penso che non dovrei preoccuparmi, come ho capito, dopo aver consultato:

  • man 3 exec
  • man 1p exec

Gli script della shell, quando eseguiti dalla shell, creeranno

  1. la shell esegue il programma exec , che
  2. usa il exec*** chiamate di sistema familiari che sostituiscono la shell/bash che ha eseguito lo script, con questo impedimento ulteriori azioni della shell (che è stata “sostituita”)

Come spiegato in precedenza, l'obiettivo principale di questa domanda è cercare conferma per il mio ragionamento per evitare che qualcosa nello script si verifichi dopo l'exec (come echo test ) verrebbe eseguito.

Apprezzerei una risposta generale (POSIX), per quanto possibile, ma solo in caso di particolarità sono più interessato a GNU/Linux e GNU/Bash

Risposta accettata:

exec finisce sempre lo script se esegue un comando e lo fa con successo (non correlato al codice di uscita del comando ma all'avvio).

exec può essere eseguito senza un comando in un modo molto utile:Per reindirizzare permanentemente i descrittori di file:

exec 3>/path/to/file

Se il comando non può essere avviato, il comportamento della shell dipende dalla configurazione. bash esce per impostazione predefinita.

Potrebbe essere meglio utilizzare una funzione:

safe_exec () {
    cmd="$1"
    if test -z "$cmd" || ! test -f "$cmd" || ! test -x "$cmd"; then
        exit 1
    else
        exec "[email protected]"
    fi
}

safe_exec echo "some "; echo "test"

Linux
  1. Impedire l'esecuzione simultanea di uno script bash

  2. Come fare eco a un botto!?

  3. Perché la sostituzione del processo Bash non funziona con alcuni comandi?

  4. Cosa fa Exec 3?

  5. Vorrei memorizzare tutti gli argomenti della riga di comando in uno script Bash in una singola variabile

Bash Scripting – Dichiarazioni condizionali

Utilizzo delle istruzioni Case in Bash

Come posso verificare se una variabile è un numero in Bash?

Stampa l'output dell'istruzione cat nel ciclo di script bash

Qual è l'uso di $# in Bash

Cosa significa echo $? fare?