ShebangがcronにSHELLを設定しない

ShebangがcronにSHELLを設定しない

以下を含むスクリプトがあります。

#!/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でSHELLcrontabエントリ(時間表示の後の行の一部)を実行するために使用するプログラムをcronに通知する変数。

シェルはSHELL起動時に設定されない限り、この変数を設定しません。

事実はSHELLおそらく/bin/sh関係がないでしょう。スクリプトには#!/bin/bash1行があるため、bashによって実行されます。自信がある場合は、ps $$スクリプトを追加してpsスクリプトを実行しているシェルに関する情報を表示してください。

おすすめ記事