これは私にとって少し混乱しています。
次の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
スイッチを使用する必要があるようです。