• 締切済み

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% (2177/4070)
回答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

  • 変数$importfileに第1引数($1)のファイルPATHを表示したい

    下記のスクリプトを書きましたが ./aa.sh: line 6: =/tmp: command not found と言われるのはなぜですか? 変数$importfileに第1引数($1)のファイルPATHを表示したいです。 1 #/bin/bash 2 3 echo $# 4 if [ $# -eq 1 ] 5 then 6 $importfile=$1 7 echo "$importfile" 8 else 9 echo "argv file notfound" 10 exit; 11 fi 12 実行結果 ./aa.sh /tmp 1 ./aa.sh: line 6: =/tmp: command not found

  • PATHいついて

    ShellScriptの中で Perlを呼び出して動かそうとしています。 Command not foundと返ってきてしまいます。 ShellScriptの先頭には、 #! /bin/bash が入っています。 また、$PATHを見てみると、 bash: /usr/local/bin:/usr/bin:/bin:..... となっています。 後、何をチェックして、正せば良いのでしょうか? よろしくお願い致します。

  • centos7 環境変数 Laravel

    [vagrant@localhost ~]$ echo export PATH=$HOME/.composer/vendor/bin:$PATH >> ,bash_profile [vagrant@localhost ~]$ source ~/.bash_profile [vagrant@localhost ~]$ laravel -bash: laravel: command not found としてもコマンドが認識されません。なぜでしょうか?

  • シェルスクリプトの1行目に#!を書いてもダメなのはなぜ?

    test.shというシェルスクリプトを #!/bin/bash echo "bash test" のように書き、chmod +x test.shを実行し、 test.shと入力すると、bash testが表示されるはずですが、 エラーbash: test.sh :command not found が出ます。which bashでパスを見ると /bin/bashなので、問題ないはずなんですが。 ちなみに、bash test.shと入力すると、正常に実行されます。 同様のことがperlスクリプト #!/usr/bin/perl print "perl test\n"; についても起こります。 何か設定がまずいのでしょうか? RedHatLinux7.2を使用しています。

  • 環境変数の設定(PATH)

    今、環境変数の設定(PATHの設定)を行っています。 OSは、RedHat9です。 スーパーユーザーのPATHは、 echo $PATHコマンドで見ると /usr/local/sbin:/usr/bin:/home/user1/test となっている。 しかし.bash_profileをみると PATHには、/usr/local/sbin:/usr/binしか 設定しておらず、 ユーザー(user1)の.bash_profileにも /home/user1/testをPATHに設定していない。 どこかでPATH設定を行っていると思いますが わかりません。 PATHの設定は、.bash_profileを設定するとは わかっているのですが、 スーパーユーザーの.bash_profileの記述と echo $PATHで見たPATHの構成がことなるのは なぜでしょうか? よろしくお願い致します。

  • Intel C++ Compiler(Linux版)をインストールできない。

    Intel C++ Compiler 9.0 (Linux版)をインストールすることができません。 install.shを実行して、ライセンスファイルを指定したあとインストールが始まるとすぐに、 ./.././install_cc.sh: line 1272: ERROR: unable to find command "ls" !: command not found ./.././install_cc.sh: line 1276: Please add the location to the above commands to your PATH and re-run the script.: command not found ./.././install_cc.sh: line 1277: Please press Enter to continue...: command not found というエラーが出てしまいます。 lsコマンドが見つからないと書いてあるようですが、コンソールでlsコマンドは使えますし、PATHに/binも入っています。 どうしたらインストールすることができるのでしょうか? よろしくお願いします。

  • bashで変数を可変させたい

    /homeの中にあるフォルダaaa、bbb、cccのサブフォルダの容量を取得し、結果をそれぞれ、 /root/batchの中にaaa、bbb、cccというファイル名で出力。 そのファイルをcatで出力し、結果をmbox_#(#は数字)という変数に保存するバッチを作成したいと四苦八苦しながら作業を行なっております。 バッチを実行しますと、以下のようなエラーが出力されます。 ./abcde.sh: line 16: mbox_1=62: command not found ./abcde.sh: line 16: mbox_2=1: command not found ./abcde.sh: line 16: mbox_3=1: command not found mbox_#の#を可変させたいのですが、何か良い記述方法はございますでしょうか? ==以下バッチ内容== #!/bin/sh Path1=/home Path2=/root/batch n=0 for box in aaa bbb ccc do n=$[$n+1] for var in `ls $Path1/$box` do du -sm $Path1/$box/$var >> $Path2/$box done 'mbox_'$n=`cat $Path2/$box` done お手数をおかけしますが、宜しくお願い致します。

  • ログイン時にエラーメッセージが出ます。

    redhatlinux(2.4.18-14)で、telnetでログイン時に以下のようなメッセージが出るようになってしまいました。 ************************* -bash: id: command not found -bash: [: =: unary operator expected -bash: id: command not found -bash: dircolors: command not found -bash: id: command not found -bash: id: command not found -bash: id: command not found -bash: [: too many arguments ************************* そもそも、昨日boot中に誤って電源を落としたことが影響しているような気がします。が、なぜかパスが通っていないため、manページも見られませんし、viも使えない状況です。こういう場合どうすればよいのでしょうか? 初歩的な質問かと思いますが、よろしくお願いします。

  • MacOSX Terminalで$PATH不正のエラーが起きる。

    ダウンロードした日本語input methodをMac OSXのX11で使用するため、これをTerminalでインストールしたいのですが、Terminalでcdした後に「./configuration」を入力すると次の表示が出ます。 「configure: error: no acceptable C compiler found in $PATH」 このため(だと思いますが)makeコマンドを打つと 「-bash: make: command not found」 というエラーが発生します。 どうすればこの問題を克服できるのでしょうか? どうぞ教えて下さい。

  • Macでldコマンド、ldconfigコマンドは使用できますか

    Mac OSXを使用しています。ldコマンドとldconfigコマンドを使用したいのですが、実行すると「bash: ldconfig: command not found」とエラーになります。Macでも使用することは可能なのでしょうか?何かインストールすれば使用出来るようになるのでしょうか?