• ベストアンサー

shでの環境変数参照方法

punchan_jpの回答

  • ベストアンサー
回答No.1

環境変数を読めないというより、その sh に対する環境変数が設定 されていないのでしょう。cron は最小限の環境変数しか設定して いません。 バージョンによっては crontab 内で追加の環境変数を設定するこ とができます。ただし、この場合には、cron から起動されるすべ てのコマンドに同じ設定がされてしまいますので、それが不都合な ら個別の設定が必要です。 個別に設定するには、シェルスクリプトを呼び出す時に VAR1=value1 VAR2=value2 script arg1 arg2 arg3 というふうに必要な変数を列挙してやります。 あるいは、シェルスクリプト内で VAR1=value1 VAR2=value2 と列挙してやります。この場合、シェル変数ではなく環境変数とし て子プロセスにも与えたい場合は、export VAR1 を追加します。 パスに関しても、PATH 環境変数の設定の問題です。

esi
質問者

お礼

早速のご回答ありがとうございました。 なんか勘違いをしていたようで、cronの実行ユーザ の環境が読み込まれると思っていました。 別途定義をシェル内で行うか、定義を記述したファイル を読み込むかしないと駄目なんですね。 どうもありがとうございました。

関連するQ&A

  • cronの挙動について

    cronの挙動について教えてください。 現在user「AAA」のcronにシェルスクリプトを登録しています。 コンソールから登録してあるスクリプトが正常に起動できることは確認できております。 しかしcron経由でコマンドが実行できない状態(/var/log/cronにコマンドを実行した履歴は残っています)でした。 色々試したところ、スクリプトの先頭で.bashrc(user「AAA」のもの)をsourceコマンドで実行するようにしたところ、cronからも起動できるようになりました。 (.bashrcには、スクリプト実行に必要な環境変数やパスの設定がされています) そこで質問なのですが、 (1) cronでコマンドを実行する場合、.bashrcは明示的に実行しなければいけないのでしょうか。 cronで実行される場合、ログインした状態と同じ環境で実行されるとばかり思っていたため、見落としていたのですが・・・。 以上、よろしくお願いいたします。

  • PowerShellと環境変数pathについて、

    PowerShellと環境変数pathについて、 Windowsの環境変数pathには、アプリケーションをインストールしたら自動的に追加されたりします。 これらの中には%systemroot%のようにdos系の環境変数を使った物もあります。 PowerShell から$env:pathを参照した場合も dosから%path%を参照した場合も pathの内容自体は同じですが、 PowerShellから実行する場合は、%systemroot%のようなdos系の環境変数は機能せず、pathが通っていない状態になります。 そんなものなのでしょうか? PowerShellを同じように使うためには、 なんとなく気持ちが悪いですが、 %systemroot%をc:\windowsで登録しなおすか、もしくは二重登録する必要があるのでしょうか? 何かスマートな方法はありますでしょうか?

  • 環境変数にアカウントに通っているパス以外のパスを反映させたいです

    情報自動収集用のシェルを組みましたが、 現在使用しているアカウントにパスが通っていない為、環境変数にパスを通そう(追加)と思っています。envを使用したことが無く、現在確認するためのUNIX環境が再編中のため検証ができずに困っております。私の調べましたところ export PATH = $PATH:/追加したい目的のパス もしくは PATH = $PATH:/追加したい目的のパス export PATH 上記コマンドをシェル実行前に実施すればいいのではないかと考えているのですが、 (1)上記コマンドを使用することで現在使用しているアカウントに検索するパスが追加されますでしょうか? (2)また上記コマンドを実施する際はルート権限が必要なのでしょうか? 自分のテスト環境が整っておらず恐縮ですが、御教授頂けないでしょうか、宜しく御願い致しますm(__)m

  • 環境変数とシェル変数

    UNIXのシェルスクリプトで使用するシェル変数と環境変数とはどういった違いがあるのでしょうか?どのように使い分ける必要があるのでしょうか?また、このような使い方をすると間違いがおこりやすいといった具体的な例など教えていただければ助かります。

  • OSの環境変数をPHPで取得する方法

    PHPでOSの環境変数に設定されている値を取得したいです。 PHPはApacheの環境変数しか取得できないみたいです。 APACHEのDocumentから以下の方法を見つけました。 ----------------------------------------------------------- httpd プロセスを起動したシェルの環境から CGI スクリプトと SSI ページに渡す環境変数を一つ以上指定します。 例 PassEnv LD_LIBRARY_PATH ----------------------------------------------------------- httpdプロセスを起動したシェルとあるのですが、Apapcheユーザの ホームディレクトリはありません。 この場合どこに設定すればよいでしょうか? /etc/bachrcや/etc/profile に設定してもダメでした。 ApacheDocumentの下記の方法だとgetenv()で取得できます。 ------------------------------------------------------------ 環境変数を設定し、それを CGI スクリプトと SSI ページに渡すようにします。 例 SetEnv SPECIAL_PATH /foo/bin ------------------------------------------------------------ なので最初の方法でもいけるのではないかと思います。 環境 PHP:521 Apache:2.0.52 OS:RedHatEL4.4

    • ベストアンサー
    • PHP
  • 環境変数って何ですか?

    自慢になりませんが、パソコンのことは何もわかりません。 こないだBorland C++とかいうのをインストールしたときに、普通の手順でインストールは済んだんですが、うまく動かず人に聞いたところ「パスが通ってないんじゃない?」といわれ、その人に「環境変数」とかいうのを変更してもらったら万事うまくいったんですが・・・。 (1)環境変数って何ですか? (2)「パスが通ってない」とはどういう意味ですか? もちろんパソコン用語辞典で調べてはみたんですが、 「OSのシェルなどに設定されている、システムの属性を記録している変数。変数の名前と意味はあらかじめ決まっているため、環境変数を読み込めばシステムの設定がある程度分かるようになっている(以下略)」 さっぱりわかりません。OSはどもかく、シェルがよくわかってません。どうか初心者向けの解説を乞う次第です。

  • シェルスクリプトをローカルで動作させるには

    cronジョブが使えるレンタルサーバーを使用しており、cronジョブから起動するshスクリプトを作ろうと思っています。 そこでシェルスクリプトを簡単に書こうと思っているのですが、プログラムはphpしかわかりません。勉強するためにはローカルで実行できる環境が必要だと思っています。 ネットでよく調べてみたのですが、シェルスクリプトをローカルで動作させる方法がわかりません。コマンドプロンプトから実行できたりしないんでしょうか?

  • システム環境変数を使いたい

    コマンドプロンプトで、cdコマンドでカレントディレクトリを移動する際、 いちいちパスを入力するのが面倒だったので、環境変数というものがあるというのを知り、 マイコンピュータ右クリック→プロパティ→詳細設定→環境変数→システム環境変数→Path に、;c:\xampp\mysql\bin と新たに追加しました。 これを使ってcdコマンドを次のように入力しました。 cd Path 指定されたパスが見つかりません。 私のやった方法でシステム環境変数の設定は間違っていないでしょうか? また、cdコマンドの入力の仕方はこうで合っているのでしょうか?

  • 環境変数PATHをスクリプトかバッチから設定する方法

    社内研修の準備のために、何台ものパソコン(Windows XPを想定)のセットアップを 行うことがありまして、 ・ZIPファイルの展開 ・展開後フォルダを特定の場所へ配置 ・環境変数JAVA_HOMEとPATHの変更 などをバッチやJavaScriptを利用して自動的に処理させようと しています。ZIPの展開と配置は解決できたのですが、 環境変数(pathなど)をスクリプトかバッチから設定できないでしょうか? JavaScript(またはVBスクリプト)で次のように記述すると、 一見うまくいったように見えるのですが、レジストリが書き換わるだけで、 再起動しないとpathが有効になりませんでした。(スクリプト実行後に開いた コマンドプロンプトで echo %path% をしても反映されていない。) <setenvion.js> var shell = WScript.CreateObject("WScript.shell"); shell.RegWrite("HKEY_CURRENT_USER\\Environment\\path", "C:\\Program Files\\Java\\jdk1.6.0_06\\bin", "REG_EXPAND_SZ"); googleで検索しても、バッチを実行するためにpathを設定しましょう、みたいな 情報しか見つからないので、質問させていただきました。 上記のスクリプトでも再起動すれば反映されるのでその点我慢すればよいのですが、 なにかよい方法をご存知の方、よろしくお願いします。

    • ベストアンサー
    • Java
  • 他のアカウントの環境変数を読み込ませ、自作シェルを動作させたいです。

    複数ファイル収集用のシェルを作成(他人作)、起動しましたが、現在使用できるアカウントではパスが通っていないため、目的のファイルの一部が収集できない状態で困っています。シェルの中身を見ましたがパスの指定がなかったため取得できていない状態でした。シェルの中身を書き換えることは他人様作成の為できませんので、、、他のパスの通っているアカウントの環境変数を読み込んだ後、そのシェルを起動したいのですがコマンド(env?)等やり方を教えてもらえないでしょうか。なお読み込ませたい環境変数はパスだけです。宜しく御願い致します。m(__)m