3

さて、これはバグがあることを意味することはすでに知っていますが、見つけることができません。私のコードを見直して、何が間違っているかを見つけていただけませんか? エラー メッセージは、私が作成した日付関数を中心に展開しています。このコードでは、他のすべての関数が正常に機能します。

エラー:

sguthrie1@cs:~$ ./finalproject.sh -d 
Segmentation fault (core dumped)

コード:

function check
{
        echo "usage: hw14.sh option argument
Please enter one or more options or arguments."
        exit
}
function date
{
        if [[ $myvar == "-d" ]]
        then date "+%d %B,%Y"
        fi
}
function host
{
        if [[ $myvar == "-h" ]]
        then hostname
        fi
}
function who
{
        if [[ $myvar == "-w" ]]
        then whoami
        fi
}
function help
{
        if [[ $myvar == "-help" ]]
        then echo "
valid options:
-d = display today's date in day-month-year format
-h = display name of computer you are currently working on
-w = display who you are logged in as
arguments:
Any argument entered is checked to see if it is a file name
"
        fi
}
if [ $# -le 0 ]
then check
fi
for myvar
do
        if [[ $myvar == "-"* ]]
        then date; host; who; help
        fi
done
4

2 に答える 2

4

date関数は、終了条件なしで再帰的に呼び出しています。これはおそらく、Bash では常に segfaultになります。command date関数の代わりに date コマンドを呼び出すために使用します。FUNCNESTbash 4.2 では、このようなエラーの検出に役立つ変数を設定することで、再帰の深さの制限を設定することもできます。

于 2012-12-08T01:07:59.810 に答える
2

date関数が誤って自分自身を呼び出しています。競合を避けるために関数の名前を変更するか、システム コマンドをより具体的に として参照することができます/bin/date

于 2012-12-08T01:07:56.737 に答える