2016-05-24 6 views
0

私はcentOSで簡単なシェルスクリプトを書いて、これをcronジョブから実行しました。 私のスクリプトは以下のようになります。Cron:シェルスクリプトからPATHを設定できない

#!/bin/bash 

export PATH=$PATH:$(pwd) 
echo $PATH 
echo $PATH| mail -s "PATH" [email protected] 

そして、私は、端末から直接このスクリプトを実行した場合、それは以下の出力:/浮浪者は、私が予想している

/sbin:/bin:/usr/sbin:/usr/bin:/vagrant 

しかし、これはcronジョブから実行された場合、それは次のように(私のメールに)出力:

cronジョブから実行するとき、私はきちんと/浮浪者を設定するにはどうすればよい
/usr/bin:/bin:/root 

UPDATE:/ VagrantをPATHとして設定できますが、それは私のためにのみ有効です。スクリプトを他のユーザーに配布する場合は、このディレクトリを作成する必要があります。だから私はそれが実行されている場所から場所をエクスポートするようなスクリプトを作成したい。

私の場合、スクリプトは/ vagrantから実行されていますが、現在のディレクトリは/ rootとしてエクスポートされています。これが問題です。

更新:悲しいことに、パスは正しくエクスポートされましたが、/ vagrantディレクトリのファイルが見つからないと報告されました。

+0

さて、 '/ vagrant'を指定してください。 '$(pwd)'は現在の作業ディレクトリを解決します。これは状況によって異なります。 – arkascha

+0

'cron'は別の環境で動作するので、あなたがあなたのユーザーと一緒に走ったときと同じ値を取ることはできません。 '/ vagrant'を追加したい場合は、単にハードコードしてください。変数を使用する場合は、[crontabが使用する環境変数はどこで設定できますか?](http://stackoverflow.com/a/37183809/1983854) – fedorqui

+0

また、使用したいもの:現在の作業ディレクトリ(pwd)またはスクリプトのディレクトリ? – fedorqui

答えて

1

cronジョブはオーナーのホームディレクトリで実行されるので、実行するとpwdとなります。代わりにあなたが望むディレクトリを置くだけです。クロンは、プレーンshを実行するため

PATH=$PATH:/vagrant 

ところで、あなたは(確実に)バッシュ構文export variable=valueを使用することはできません。とにかく、変数がexportPATH変数には必要ありません。変数が既にエクスポートされているからです(そうでない場合は機能しません)。

+0

cronはあなたがそれに尋ねるものは何でも実行できますか? '* * * */bin/bash/home/me/script.sh'と言うことができます。 – fedorqui

+1

@fedorquiあなたはもちろん正しいです。 OPがshebangを介してスクリプトを実行していないか、またはshebangにもかかわらず明示的に 'sh'を指定している場合にはエラーが1つあります。とにかく、これは今はやっかいだと思います。 – tripleee

関連する問題