Domanda

Ho uno script di shell di pesce il cui comportamento predefinito è quello di inviare una e-mail una volta completato. Mi piacerebbe modificarlo a rispondere a un argomento nomail dalla riga di comando. Così, per esempio, l'esecuzione dello script normalmente produrrebbe una e-mail:

michaelmichael: ~/bin/myscript

Ma se eseguito con l'interruttore nomail, non avrebbe mandato l'e-mail di conferma:

michaelmichael: ~/bin/myscript nomail

Se faccio funzionare lo scritto con l'argomento nomail, funziona benissimo. Senza nomail, $argv non è definito e genera un errore. Ho perlustrato la documentazione della shell di pesce, ma non riesco a trovare nulla che funziona. Ecco quello che ho finora

switch $argv
  case nomail
    ## Perform normal script functions
  case ???
    ## Perform normal script functions
    mailx -s "Script Done!"
end

L'esecuzione di questo getta il seguente errore:

switch: Expected exactly one argument, got 0

Ovviamente si aspetta un argomento, solo che non so la sintassi per dicendogli di non accettare argomenti o uno se esiste.

Sto indovinando questo è piuttosto semplice, ma io proprio non capisco scripting di shell molto bene.

È stato utile?

Soluzione

Wrap sua dichiarazione switch in questo modo:

if set -q argv
    ...
end

Inoltre, penso che il tuo caso di default dovrebbe essere case '*'.

Altri suggerimenti

Se si preferisce utilizzare un'istruzione switch è anche possibile:

switch (echo $argv)
  case nomail
    ## Perform normal script functions
  case '*'
    ## Perform normal script functions
    mailx -s "Script Done!"
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top