cronから呼び出すときにインタプリタが/ bin / bashであることを証明する方法は?

cronから呼び出すときにインタプリタが/ bin / bashであることを証明する方法は?

これは私にとって少し混乱しています。

次のcronjobを単独で試すとき:

* * * * * /bin/bash -c "readlink /proc/$$/exe >> /root/printenv"
* * * * * /bin/bash -c "readlink /proc/$PPID/exe >> /root/printenv"
* * * * * /bin/bash -c "readlink /proc/self/exe >> /root/printenv"
* * * * * /bin/bash -c "ps -h -o comm -p $$ >> /root/printenv"
* * * * * /bin/bash -c "echo $SHELL" >> /root/printenv

私はそれぞれ次のような結果を得ます。

/bin/dash
/usr/sbin/cron
/bin/readlink
sh
/bin/sh

このようにcronで呼び出すと、/bin/bashどんな状況でも報告できないようです。

直接cronjobで""が解釈されている* * * * * /bin/bash -c "command"ことをどのように証明できますか?command/bin/bash

後で参考にする回答:

二重引用符を一重引用符に変更すると、正しいシェルが返されます。

* * * * * /bin/bash -c 'readlink /proc/$$/exe >> /root/printenv'

に戻る:

/bin/bash

以下の回答に貢献してくださった皆様に感謝します。

ベストアンサー1

この場合、私のデフォルトのシェルはbashあり、テストを実行しました。

sh -c 'echo $0'

結果:sh

sh -c "echo $0"

結果:-bash

 bash -c 'echo $0'

結果:bash

 bash -c "echo $0"

結果:-bash

'一重引用符の後に-cスイッチを使用する必要があるようです。

おすすめ記事