• 締切済み

PATH変数の設定方法?

opensolarisを自宅PCに導入して、シェルスルリプトの勉強をしております。 実行時、【 ./aaa.sh 】と、コマンド実行ならうまくいくのですが、 【 aaa.sh 】 では、 「bash: aaa.sh: command not found」 と、エラーになってしまいます。 PATH設定の問題と考えているのですが、設定方法をご教授頂けないでしょうか?

みんなの回答

回答No.4

ホームをパスに追加するのは若干気持ち悪いですが行っても良いかと。 aaa.shなどを作っているフォルダが$HOME/shcreateフォルダなら$HOME/shcreateフォルダをPATH設定に加えれば良いし。 No2の回答に > # 知らぬ間に乗っ取られたりしていて、自分のホームディレクトリ直下にlsという名の破壊プログラムがあったら…どうなります? > # まぁ、本当に乗っ取られていたら元々のlsコマンド書き換えられているでしょうけど。 とありますが、カレントディレクトリをパスに加える事が安全上(セキュリティ上)問題とされている事の説明としては説明になってません。 何が問題かというと、作業中にcdした先にあるls等のコマンドを実行させられる事があるので問題なのです。 例えば cd /tmp して作業している時にlsすれば誰が置いたか分からないls(/tmp/ls)を実行させられる。もちろん、/tmpなんて全てのユーザに書き込めるでしょうし、サービスプログラム(xxxサーバなど)が書いてるかも知れない。 > PATH設定の問題と考えているのですが、設定方法をご教授頂けないでしょうか? 作業中一時的にPATHを追加したいのでしょうか。 それとも恒久的な設定でPATHを追加したいのでしょうか。 追加自体は sh系 PATH="/add/path:$PATH" ※普通PATH環境変数はexport済などでわざわざもう一度exportする必要はなさそう csh系 path=(/add/path $path) でできると思いますが。 恒久的に行う場合にはシェルの初期設定ファイルに追加すれば良いし、一時的に行うなら一時的に行えるようにシェルの初期設定ファイルを調整してコマンド操作で行えば良いです。 例えばcsh系だと $HOME/.login path=(/my/path $path) と書いておけばlogin時に自身で使うPATH環境変数が設定されます。 あとは、必要な場面でpath=(/add/path $path)などで追加・変更すれば対話的にも調整しながら使えます。 $HOME/.cshrcに path=(/my/path $path) と書けばシェル起動の度に初期化(この場合追加)されるので PATHが/my/path:/my/path:/my/path:/my/path:$systemupathなんてなっているかも。 ※対話的に変えたい環境変数は$HOME/shell初期化スクリプトより$HOME/.loginで設定した方が向いていると思います。シェルを起動する度に再設定されると困る事(対話的に変えてもコマンド動かすとシェル初期化スクリプトで設定される値で上書きされて変わってくれない)もありますし。

  • jf5qdk
  • ベストアンサー率80% (4/5)
回答No.3

既に書かれていますが、pathを通す必要があります。 bashを使っているならばカレントユーザのホームディレクトリの.bash_profileを編集します。 もしくは.profileでもOKだと思います。 ただ、ホームディレクトリにpathを通すのは怖いので、 しかるべき場所に保存してシンボリックリンクを置いてやるのがいいと思います。 参照URLにlnの使い方を貼っておきます。

参考URL:
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230812/
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

普通は…サキュリティ関係とかの問題で「カレントディレクトリ」はPATHに含めないモノなのですが…。 # 知らぬ間に乗っ取られたりしていて、自分のホームディレクトリ直下にlsという名の破壊プログラムがあったら…どうなります? # まぁ、本当に乗っ取られていたら元々のlsコマンド書き換えられているでしょうけど。 PATH環境変数に、"."を追加すれば、お望みの動作にはなるでしょう。 激しくオススメはしませんが。

参考URL:
http://www.nurs.or.jp/~asada/FAQ/UNIX/section2.13.html
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

パス無しで入力されたコマンドを探すときに、環境変数PATHが使われるのは御存じかと思います。 unix系OSでは、PATHに明示されていなければ、カレントディレクリから探すことはしません。この点は、まずはカレントディレクリから探し始めるWindowsとは違うところです。 解決策は 「PATHに明示的にカレントディレクリを含める」です。具体的には export PATH=.:/usr/bin: ... 等とカレントディレクリを表わす「 . 」をPATHに追加します。 ただ、セキュリティの観点から、あまりお勧めできません。 現状のまま、PATHには カレントディレクリは含めずに、 ・一時的にしか使わないものは、(今と同じように)パス付きで実行する ・よく使うものは、PATH上の適当なところ( $HOME/bin とか /usr/local/bin 等)にスクリプトを置く というのが一般的かと思います。

関連するQ&A

専門家に質問してみよう