2017-07-26 11 views
0

に実行するコマンドの前に私は、crontabファイルを見て、次のエントリを見つけた:意味は、crontabエントリ

30 05 * * * /bin/zsh -ls % MyScript.sh myConfigFile.ini

このエントリは明らかにmyConfigFile.iniMyScript.shなどを実行します引数はzshですが、ここでは-ls %の意味は何ですか?

答えて

1

実際にはMyScript.sh myConfigFile.iniを実際に実行しますが、見た目ほど明白ではありません。

-ls-l -sの略です。これらのパラメータは、

  • -lはそれがログインシェルになることですzshのを伝えるオプションLOGINを、可能zshの中で特定のオプションを有効にします。これはまた、初期化時に~/.zprofileエンド/etc/zprofile(または一部のシステムでは/etc/zsh/zprofile)が読み込まれ、終了時に~/.zlogoutおよび/etc/zlogoutが読み取られることを意味します。
  • -sは、オプションSHIN_STDINを有効にします。これは、コマンドが-c COMMANDで指定され、スクリプトが指定されていない場合、からコマンドを読み取るためにzshにSTDINを指定します。 -sを明示的に設定すると、コマンドラインからのスクリプトの取得も無効になります。通常、ファイルとして取られる引数は、通常の位置パラメータとして使用されます(つまり、起動されたシェルセッション内では、配列[email protected]および$*、スカラーパラメータ$1$2)で使用できます。
  • ので、通常

zsh -ls % MyScript.sh myConfigFile.iniはそれぞれ、%MyScript.shmyConfigFile.iniにパラメータ$1$2$3セットでzshのログインシェルを起動します。 ではなくが実行MyScript.shとなり、代わりにSTDINから入力を待つことになります。

これはcrontabの中にあります。コマンド内の%は、\でエスケープしない限り、特別な意味を持ちます。最初の%の後のすべてがコマンドの標準入力として送信されます。さらに%は改行文字に置き換えられます。

cron(またはそのスタンドでは)このcrontabエントリ

30 05 * * * /bin/zsh -ls % MyScript.sh myConfigFile.ini 

を実行するときに組み合わせて、それがSTDINに入力を待つだろうログインシェルとしてzshを開始します。 cronMyScript.sh myConfigFile.iniSTDINとしてシェルに送信します。それは(だけではなくMyScript.sh myConfigFile.iniまたは多分/path/to/MyScript.sh myConfigFile.iniの)このように行われていたのはなぜ


は、より詳細な情報なしに伝えるのは難しいです。 MyScript.shzshのスクリプトの購入は本当に何か実行可能かもしれないということを覚えておいてください。したがって、MyScript.shには、環境設定が~/.zprofileである必要があります。