関数内でメールコマンドを実行すると、「フォークボム」が発生します。

関数内でメールコマンドを実行すると、「フォークボム」が発生します。

mailBashスクリプトの関数内で実行しようとすると、フォーク爆弾のようなものが生成されます。明確にすると、次の問題が発生します。

#!/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

関数名は、関数自体内で呼び出されなくなりました。

おすすめ記事