Bashスクリプトを作成するときに、私はいつもPATH
環境変数を定義する最初の行を持っています。私は最近、これはスクリプトが非常にポータブルになっていないことを発見しました。PATH
の変数はLinuxのバージョンによって異なります(私の場合は、スクリプトをArch LinuxからUbuntuに移して、さまざまな実行可能ファイルが同じ場所)。PATH環境変数をcronで起動されたbashスクリプトにインポート
ログインシェルで定義されたPATH
環境変数を現在のBashスクリプトにコピーすることはできますか?
EDIT: 私は私の質問は、私はbashスクリプトでログインシェルのPATH
環境変数を変更するいくつかの考え方が得られ、いくつかの混乱を引き起こしていることがわかり、何の正反対ですが欲しいです。
これは私が現在、私のbashスクリプトの1つの上部に持っているものです。
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
# Test if an internet connection is present
wget -O /dev/null google.com
私はからログインシェルをコピーPATH
の値が何かを持つ、第2のラインを交換したいですにスクリプト環境:
#!/bin/bash
PATH=$(command that copies value of PATH from login shell)
# Test if an internet connection is present
wget -O /dev/null google.com
EDIT 2:大変申し訳ございませんが、問題のスクリプトがcronを介してスケジュールで実行されていることに言及するのを忘れました。 Cronは、ログインシェルの環境変数を使用しないスクリプトを実行するための独自の環境を作成します。私はちょうどcronで次のスクリプトを実行しようとしました:
#!/bin/bash
echo $PATH >> /home/user/output.txt
結果は次のとおりです。あなたが見ることができるように、クーロンで使用PATH
変数は、ログインシェルに異なっている:あなたは特別な理由がない限り、
[email protected]_router:~$ cat output.txt
/usr/bin:/bin
[email protected]_router:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
あなたがこれを行うにはしたくない理由は? –
Mac OS Xでは、 '/ etc/profile'には次のものが含まれています:' if [-x/usr/libexec/path_helper]; eval '/ usr/libexec/path_helper -s'を実行します。 fi'。これは 'PATH'と' MANPATH'を設定します。あなたはU&LとSUで 'path_helper'に関する質問を見つけることができます - 言及された速度問題は解決されました(少数 - 10.11.6の8-10ミリ秒のように)。 Linuxの '/ etc/paths.d'を見てください。しかし、疑問が残っています - あなたはなぜPATHを試してみたいのですか?私はコマンドのどのバージョンを使うべきかについて私自身の見解を持っているかもしれません。それは私のPATHの設定です。もちろん、私があなたのスクリプトを壊した場合、それを修正するために私に責任があります。 –
私はあなたの2人が私が要求していたことを誤解しているのではないかと心配しています。私はうまくいけば物事をクリアするために私の質問を編集しました。 – XJDHDR