21624


Railsのスケジュール管理`whenever`で生成されるコマンドでは `/bin/bash -l -c`の引数としてコマンドが渡されていて、`-l`
がログインシェルの振る舞いをし、`-c`が文字列をコマンドとして評価する事はわかったのですが、仮に`-l`オプションがなかった時に何か動作の違いがあるかどうかを知りたいです。

例えばcronを実行するユーザーのシェルが`bash`の時に

[code]

    0 * * * * bash -c "echo foo"
    
[/code]

と

[code]

    0 * * * * echo foo
    
[/code]

に何か違いはでますか？ また何か違いを意識して置かなければならない状況はあるのでしょうか？


CC BY-SA 3.0
2016-02-02T08:32:01.047
21619
2016-02-02T10:01:06.567
3271
question
bash cron
cronで `bash -c` オプションの引数としてコマンドを使う場合と直接呼び出す時の違い


crontab に書かれているコマンドは、ユーザーのログインシェルではなく crontab 内の `SHELL`
変数に指定されているものが使われます。何も指定されていない場合は `/bin/sh` です (参考:
[crontab(5)](https://linuxjm.osdn.jp/html/cron/man5/crontab.5.html))。

環境によっては `/bin/sh` の実体が bash の場合があるかもしれませんが、そうでない場合は `bash -c ...` と書かないと bash
固有の機能が使えません。

また、`/bin/sh` の実体が bash であっても、bash が `/bin/sh` として起動された場合には bash
用の設定ファイルは読み込まれない (`bash --norc` 相当) ので、動作環境が異なる場合があるかもしれません。bash が sh
として起動された場合の動作の詳細については
[bash(1)](https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html) を参照してください。


CC BY-SA 3.0
2016-02-02T10:01:06.567
21624
2016-02-02T10:01:06.567
2521
21619
answer