人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

/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」のような カレントが他のフォルダである場合に
実行成功させるにはどうすればいいのでしょうか?



●質問者: のの
●カテゴリ:コンピュータ
✍キーワード:CD orz カレント ファイル フォルダ
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● wm5775
●10ポイント

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

◎質問者からの返答

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

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

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


2 ● くまっぷす
●45ポイント ベストアンサー

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

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も条件によってはダメですね。

◎質問者からの返答

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

理解できました。

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


3 ● naka-m
●25ポイント

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

ユーザパスに

/usr/local/bin

または

.(カレント)

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

# env | grep PATH


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

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

◎質問者からの返答

# env | grep PATH

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

ありがとうございます。


4 ● kurukuru-neko
●45ポイント

・その2 :

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

が含まれていない。

確認方法:

echo $PATH

"."がないはず。

・その3 :

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

正常動作していない。

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

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

可能性がある。

プログラムを修正するか

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

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

プログラムを作成する。

ファイル "/usr/local/bin/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

◎質問者からの返答

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

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


5 ● toohigh
●25ポイント

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

> printenv PATH

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

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

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


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

◎質問者からの返答

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

# env | grep PATH

# echo $PATH

# printenv PATH

こんなにあったとはorz w

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ