オプションの引数でフィッシュシェルスクリプトを書く

StackOverflow https://stackoverflow.com/questions/3118529

  •  29-09-2019
  •  | 
  •  

質問

私は、完了したときに電子メールを送信するデフォルトの動作であるフィッシュシェルスクリプトを持っています。 Aに応答するように変更したいと思います nomail コマンドラインからの議論。したがって、たとえば、スクリプトを実行すると通常、メールが作成されます。

michaelmichael: ~/bin/myscript

しかし、で実行する場合 nomail スイッチ、確認メールは送信されません。

michaelmichael: ~/bin/myscript nomail

でスクリプトを実行した場合 nomail 議論、それは正常に実行されます。それなし nomail, $argv 未定義であり、エラーをスローします。私は魚の殻のドキュメントを精査しましたが、うまくいくものを見つけることができないようです。これが私がこれまでに持っているものです

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

これを実行すると、次のエラーがスローされます。

switch: Expected exactly one argument, got 0

明らかに、それは議論を期待していますが、私はそれが引数を受け入れないように伝えるための構文、またはそれが存在するかどうかを知らないことを知りません。

これはかなり基本的なものだと思いますが、シェルスクリプトがよくわかりません。

役に立ちましたか?

解決

あなたを包みます switch このような声明:

if set -q argv
    ...
end

また、あなたのデフォルトのケースはあるべきだと思います case '*'.

他のヒント

スイッチステートメントを使用することを好む場合は、それも可能です:

switch (echo $argv)
  case nomail
    ## Perform normal script functions
  case '*'
    ## Perform normal script functions
    mailx -s "Script Done!"
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top