BASH_ENVとクローン操作

BASH_ENVとクローン操作

非対話型、非ログインシェル、クローン操作に関するいくつかの質問があります。

Q1.非対話型、非ログインのシェルは「load」のみ可能であることを読みました$BASH_ENV。これは正確に何を意味しますか?これは、私が$BASH_ENVファイルを指すときにファイルをインポートできることを意味しますか?

第2四半期cron:Bash shebangを使用してBashスクリプトを指すエントリがあると仮定すると、Bashスクリプトがロードされると仮定できる環境変数と定義は何ですか?

第3四半期SHELL=/bin/bash:私の上部に追加すると、crontab正確に何をしますか?これは次の意味ですか?

  1. cronBashでそれ自体で実行されますか?
  2. 注文する指定済みcrontabBashと解釈されますか?
  3. 以下を実行するスクリプトいいえそのうち、shebangs以下を実行してみてください。$SHELL

他に何かありますか?

第4四半期BASH_ENV:クローンジョブを設定する方法は?

答え1

Q1とQ2については、以下を参照してください。ここ。 Q3は、他の3つの質問について以下の議論で回答されます。

WRT $BASH_ENV、ソースman bash

たとえば、bashが非対話型で始まる場合は、シェルスクリプトを実行するために環境でBASH_ENV変数を探し、その値がある場合は展開し、拡張値をファイル名として読み込み実行します。

したがって、これはおそらく.profileタイプライターで書かれたスクリプトです。どこで、または誰が設定するかは状況によって異なります。通常は設定されていませんが、現在のプロセスの先祖によって設定できます。 cronこれに対する特別な用途はないようで、AFAIKはinitを使用しません。

これはcron自体がBashで実行されることを意味しますか?

「in」がシェルから始まるという意味であれば、initシステムによって異なります。たとえば、SysV はサービスに対してシェルスクリプトを実行するため、そのサービスは常にシェルを介して起動されます。

しかし、「in」が「シェルプロセスの子プロセスですか?」を意味する場合、いいえ。 他のデーモンと同様に、独自のプロセスグループのリーダーとして実行され、親プロセスはinitプロセス(pid 1)です。

cronただし、環境への影響は大きくない可能性があります。スタートアップサービス環境の詳細については、上記のQ1、Q2の回答を参照してください。 WRTは特にcronを対象としており、これによるman 5 crontabセット複数の環境変数(および$LOGNAME)が開始されたプロセスから継承されます。$HOME$SHELL

crontabで指定されたコマンドはBashで解釈されますか?

sh以下で、またはを使用して$SHELLもう一度説明しますman 5 crontab

改行または "%"文字までの行の完全なコマンド部分を/ bin / shまたはから読み込みます。cronfileのSHELL変数で指定されたシェルによって実行されます。 バックスラッシュ()でエスケープしない限り、コマンドの「%」文字は改行文字に変更され、最初の%以降のすべてのデータは標準入力としてコマンドに送信されます。

強調表示された部分はQ3への答えです。

Shebangのないスクリプトは$ SHELLを使用して実行されます。

$SHELLshebangの有無にかかわらず実行可能なスクリプトは(または)で開きますsh。違いは、shebangを使用すると、適切な通訳者(#!/bin/shシェルの別のインスタンスに)に渡されることです。実行可能ファイルshebangを持たないスクリプト(実行ファイルで参照される実行可能ビットセットを含むスクリプト)は、コマンドラインで実行したときと同じように失敗します(実行しない限りsh script.sh)。

関連情報