/usr/local/bin に、 hogeexec という実行ファイルがあります。


・その1 :
> cd /usr/local/bin
> ./hogeexec -option
は、実行できます。

・その2 :
> cd /usr/local/bin
> hogeexec -option
は、実行できません。

・その3 :
> cd /usr
> /usr/local/bin/hogeexec -option
は、実行できません。

質問
「その2」はナゼ実行できないのですか?(初歩的な質問・・・orz)
質問
「その3」のような カレントが他のフォルダである場合に
実行成功させるにはどうすればいいのでしょうか?
 

回答の条件
  • 1人2回まで
  • 登録:2006/07/11 16:27:04
  • 終了:2006/07/11 21:05:43

ベストアンサー

id:Kumappus No.2

くまっぷす回答回数3784ベストアンサー獲得回数1852006/07/11 16:45:47

ポイント45pt

どういうエラーが出ているか正確に教えてください。

2について。ちょっと考えられるのはコマンドパスが通ってないからでは?です。カレントディレクトリ(.)はたいていの場合パスに入れませんから。

例えばbashだとprintenvしてPATHという変数のなかに/usr/local/binがないとダメです。(1と同じで.cd/usr/local/bin; ./hogeexecとすれば動きます)。

Vineでも確か/etc/profileというファイルの中でパスの指定をしていますし、rootで動かすなら/root/.bash_profileなどで

export PATH="$PATH:/usr/local/bin"でパスを追加するなどで対応。

でもたぶん/usr/local/binは大抵インストールした時点でPATHに入ってそうですしね…。

あと、考えられるのは/usr/local/binの実行権限が、例えばls -ld /usr/local/binで見ると

drwxr--r-- 2 root root /usr/local/bin ...

みたいになっていてroot以外のユーザの実行権限がないとか…?これだと2も3も条件によってはダメですね。

id:s_mitsuki

すみません、/usr/local/binは例で出しました、紛らわしかったですね。

理解できました。

別件でもお世話になっています。ありがとうございます。

2006/07/11 20:56:59

その他の回答(4件)

id:wm5775 No.1

wm5775回答回数351ベストアンサー獲得回数42006/07/11 16:39:24

ポイント10pt

パスにカレントディレクトリ(つまり . )を加えることで解決すると思います。

id:s_mitsuki

うーん、できませんでした。

アプリによってはできるのかもしれませんが。

その違いはなんなんでしょうか。

2006/07/11 21:02:39
id:Kumappus No.2

くまっぷす回答回数3784ベストアンサー獲得回数1852006/07/11 16:45:47ここでベストアンサー

ポイント45pt

どういうエラーが出ているか正確に教えてください。

2について。ちょっと考えられるのはコマンドパスが通ってないからでは?です。カレントディレクトリ(.)はたいていの場合パスに入れませんから。

例えばbashだとprintenvしてPATHという変数のなかに/usr/local/binがないとダメです。(1と同じで.cd/usr/local/bin; ./hogeexecとすれば動きます)。

Vineでも確か/etc/profileというファイルの中でパスの指定をしていますし、rootで動かすなら/root/.bash_profileなどで

export PATH="$PATH:/usr/local/bin"でパスを追加するなどで対応。

でもたぶん/usr/local/binは大抵インストールした時点でPATHに入ってそうですしね…。

あと、考えられるのは/usr/local/binの実行権限が、例えばls -ld /usr/local/binで見ると

drwxr--r-- 2 root root /usr/local/bin ...

みたいになっていてroot以外のユーザの実行権限がないとか…?これだと2も3も条件によってはダメですね。

id:s_mitsuki

すみません、/usr/local/binは例で出しました、紛らわしかったですね。

理解できました。

別件でもお世話になっています。ありがとうございます。

2006/07/11 20:56:59
id:naka-m No.3

naka-m回答回数21ベストアンサー獲得回数02006/07/11 17:10:49

ポイント25pt

>「その2」はナゼ実行できないのですか?(初歩的な質問・・・orz)

ユーザパスに

/usr/local/bin

または

.(カレント)

が含まれていないからではないでしょうか?

# env | grep PATH


>「その3」のような カレントが他のフォルダである場合に実行成功させるにはどうすればいいのでしょうか?

一般的にコマンドは /(ルート)からのパスを記述すればカレントがどこであろうが常に実行出来ます。これが出来ないとすれば、hogeexec 自体に問題があり、例えば /usr/ 上では実行出来ないような実行内容になっているのではないでしょうか?

id:s_mitsuki

# env | grep PATH

やってみました。確かに本実行ファイルがあるフォルダはありませんでした。

ありがとうございます。

2006/07/11 20:58:45
id:kurukuru-neko No.4

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/07/11 18:45:26

ポイント45pt

・その2 :

 環境変数 PAHT にカレントディレクトリー

が含まれていない。

確認方法:

echo $PATH

"."がないはず。

・その3 :

プログラムは実効されているが

正常動作していない。

プログラムが /usr/local/binでしか

動作しないように作成されている

可能性がある。

プログラムを修正するか

シェルスクリプト等でディレクトリー

を移動してからコマンドを実行するような

プログラムを作成する。

 ファイル "/usr/local/bin/hoge.sh"を作成

  • hoge.sh ---

#!/bin/bash

cd /usr/local/bin

./hogexec $*

exit $?

-----------------

chmod 0555 /usr/local/bin/hoge.sh

cd /usr

/usr/local/bin/hoge.sh -option

id:s_mitsuki

おおお、これまた良い回答を頂きました!

こういう超具体的なレスキュー例はとっても助かります。

2006/07/11 21:00:21
id:toohigh No.5

toohigh回答回数291ベストアンサー獲得回数372006/07/11 20:54:23

ポイント25pt

「その2」が実行できないのは、カレントディレクトリが PATH に含まれていないから、です。

> printenv PATH

絶対パス指定でない何かを実行しようとすると、上記コマンドなどで見れる PATH 環境変数に含まれる場所を順に探していくことになるわけですが、ここにコレントディレクトリが含まれていない、ということになります。

MS-DOS だと、暗黙的にカレントディレクトリも検索対象になっていたので、そっちの経験がある方だとよくある疑問かと思います。(自身の経験も踏まえて・・・)

「その3」が実行できない原因については、ちょっとわかりません。「その2」とは違う症状で実行できない、ということでしたら、その実行ファイル自体がカレントディレクトリに依存する処理(カレントディレクトリにあるファイルを読む、など)を行っている可能性が高いかと思います。


以上、OS や環境によって何とも言えないところがあるのですが、一般論で・・。

id:s_mitsuki

環境変数PATHの確認方法が!

# env | grep PATH

# echo $PATH

# printenv PATH

こんなにあったとはorz w

ありがとうございました。

2006/07/11 21:02:27

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません