$PATH 環境変数の割合

$PATH 環境変数の割合

私の$ PATHは次のようになります。

/home/torbjorr/deployed/vector/x86_64-GNU%2fLinux:/home/torbjorr/deployed/typewriter/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mustudio/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mathext/x86_64-GNU%2fLinux:/home/torbjorr/deployed/doxymax/x86_64-GNU%2fLinux:/home/torbjorr/deployed/c2tex/x86_64-GNU%2fLinux:/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand:/home/torbjorr/deployed/x86_64-GNU%2fLinux/spellesc:/home/torbjorr/deployed/x86_64-GNU%2fLinux/projinit:/home/torbjorr/deployed/x86_64-GNU%2fLinux/herbs:/home/torbjorr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Bashでは、次の場所にあるコマンドを呼び出すことができます。

/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand

良い

$ wand
(i) Mål från "main.cpp" har registrerats
(i) Skapar katalog "__wand_targets_dbg"
(i) Kör g++ "main.cpp" -fpic -L"/home/torbjorr/deployed"  -g -Wall -std=c++11 -I"/home/torbjorr/deployed" -o "__wand_targets_dbg/cb-template

しかし、Bourne Shell互換モードでは杖が見つかりません。

$ wand
sh: 2: wand: not found

問題はこのパスの%記号のようです。シンボルはURLエンコードで追加されているため、「GNU / Linux」という名前は有効なファイル名ではなくてもディレクトリ名に使用できます。 shで名前が機能するようにするか、shコマンドをbashのように機能させることは可能ですか?つまり、bashはbashに関係なくシンボリックリンクされた/ bin / shコマンドを使用して呼び出されても同じように動作します。

ベストアンサー1

これはBourneシェルでもbashBourneシェルのエミュレーションでもありませんが、Almquistシェルです。あなたの場合はDebian Almquistシェルかもしれません(DebianのBSD shはもともとAlmquistシェルのLinuxフォークに基づいています)。

Almquistシェル(オリジナルと最新バージョン)では、ドキュメントから引用%PATHash

ルート検索

コマンドが見つかると、シェルはまずその名前のシェル関数が存在することを確認します。その後、PATHにエントリがない場合は、 %builtinその名前で組み込みコマンドを探します。最後に、PATH の各エントリから対応するコマンドを順番に検索します。

PATH変数の値は、コロンで区切られた一連の項目でなければなりません。各エントリは、ディレクトリ名またはディレクトリ名の後にパーセント記号で始まるフラグで構成されます。現在のディレクトリは空のディレクトリ名で表示する必要があります。パーセント記号がない場合、このエントリはシェルが指定されたディレクトリからコマンドを検索するようにします。このフラグが yes の場合、シェル組み込みコマンドの%builtin リストが検索されます。フラグがある場合は、ディレクトリから %func シェルへの入力として読み取るファイルを検索します。このファイルは、検索しているコマンドの名前を持つ関数を定義する必要があります。

スラッシュを含むコマンド名は、上記の検索を実行せずに単に実行されます。

他のシェルには同様の機能自動ロードメカニズムがありkshますzshが、他の変数()を使用します$FPATHが、どの関数または実行可能ファイルが優先するかを定義することはできません。

あなたの場合は、フラグ付きのディレクトリ/home/torbjorr/deployed/vector/x86_64-GNU%2fLinuxとして解釈されます。このフラグは不明なので無視されます。/home/torbjorr/deployed/vector/x86_64-GNU2fLinux

この問題を解決する方法はありません。 Ashに脱出メカニズムがあるため、特に扱われていなくても%他の殻やそれに似たものでは動作しません。$PATHexecvp()

%の文字を削除する必要があるため、$PATHディレクトリの名前を変更するか、シンボリックリンクを追加してください。

または、これを行わない他の軽量POSIXシェル実装ではash使用しないでください。/bin/shyashそしてmksh

おすすめ記事