mail
Bashスクリプトの関数内で実行しようとすると、フォーク爆弾のようなものが生成されます。明確にすると、次の問題が発生します。
#!/bin/bash
mail() {
echo "Free of oxens" | mail -s "Do you want to play chicken with the void?" "[email protected]"
}
mail
exit 0
時にはコマンドを終了すると子プロセスが終了しますが、時にはkillall -9
。
メッセージが送信されたかどうかは重要ではありません。これフォーク爆弾どちらも作成できます。そして、終了コードの確認(例:)を追加するのはif ! [ "$?" = 0 ]
役に立たないようです。
ただし、以下のスクリプトはエラーを出力したり電子メールを送信するなど、期待どおりに機能します。
#!/bin/bash
echo "Free of oxens" | mail -s "Do you want to play chicken with the void?" "[email protected]"
exit 0
なぜこれが起こるのですか? mailコマンドの終了コードをどのように確認しますか?
ベストアンサー1
あなたは電話中です機能 mail
同じ関数内で:
#!/bin/bash
mail() {
# This actually calls the "mail" function
# and not the "mail" executable
echo "Free of oxens" | mail -s "Do you want to play chicken with the void?" "[email protected]"
}
mail
exit 0
これは働きます:
#!/bin/bash
mailfunc() {
echo "Free of oxens" | mail -s "Do you want to play chicken with the void?" "[email protected]"
}
mailfunc
exit 0
関数名は、関数自体内で呼び出されなくなりました。