以下を含むスクリプトがあります。
#!/bin/bash
printenv
コマンドラインから実行するとき:
env testscript.sh
bash testscript.sh
sh testscript.sh
毎回出力しますSHELL=/bin/bash
が、cronで実行すると常に出力されますSHELL=/bin/sh
。 cronにshebangを適用させるにはどうすればよいですか?
クローンパスを確認しましたが、これには/ binが含まれています。
ベストアンサー1
shebangが動作しており、cronはそれとは何の関係もありません。ファイルの実行時にファイルの内容がで始まると、#!
カーネルは#!
その行で指定されたファイルを実行し、元のファイルを引数として渡します。
SHELL
問題は、スクリプトが実行されているシェルがシェルスクリプトに反映されていると信じているようです。そうではありません。実際、ほとんどの場合、SHELL
ユーザーの好みを意味します。インタラクティブシェルの役割は、ターミナルエミュレータなどのアプリケーションに実行するシェルを決定させることです。 cronでSHELL
crontabエントリ(時間表示の後の行の一部)を実行するために使用するプログラムをcronに通知する変数。
シェルはSHELL
起動時に設定されない限り、この変数を設定しません。
事実はSHELL
おそらく/bin/sh
関係がないでしょう。スクリプトには#!/bin/bash
1行があるため、bashによって実行されます。自信がある場合は、ps $$
スクリプトを追加してps
スクリプトを実行しているシェルに関する情報を表示してください。