URLリンクにcommand_not_found_handleを設定しようとしています。
%> command_not_found_handle() { echo "OK"; }
%> aaaaa
OK
%> http://www.google.com
bash: http://www.google.com: No such file or directory
これは通常の入力には機能しますが、URLリンクには機能しません。どんなアイデアがありますか?
答え1
URLはサブディレクトリを含むと見なされます。たとえば、次のように見てください。
$ command_not_found_handle() { echo "OK"; }
$ aaa
OK
$ aaa/bbb
bash: aaa/bbb: No such file or directory
$
つまり、コマンドを実行すると機能しますが、スラッシュを含むコマンドを実行すると、bbb
フォルダで操作を実行しようとする可能性がありますaaa
。 URLでも同じことが起こります。 URLはwww.google.com
ディレクトリからコマンドを実行していると思いますhttp:
。
Bashのマニュアルページから:
name がシェル関数でも組み込み関数でもない場合、スラッシュは含まれません。、bashは、PATHの各要素からその名前の実行可能ファイルを含むディレクトリを検索します。 Bashは、実行可能ファイルのフルパス名を記憶するためにハッシュテーブルを使用します(以下のSHELL BUILTIN COMMANDSの下のハッシュを参照)。ハッシュテーブルでコマンドが見つからない場合にのみ、PATHのディレクトリ全体の検索が行われます。検索に失敗すると、シェルはcommand_not_found_handleという定義されたシェル関数を検索します。関数が存在する場合、関数は元のコマンドと元のコマンドの引数を引数として呼び出され、関数の終了状態はシェルの終了状態になります。この関数が定義されていない場合、シェルはエラーメッセージを出力し、終了ステータス127を返します。
私の強調。