なぜかこのエラーが発生します。まだ自分で把握できません。
これは私のスクリプトです。
#!/bin/bash
if (( $# != 4 )); then
echo wrong parametrs
echo 1
fi
if [[ ! -f $2 ]];then
echo file 2 doesnt exist
exit 1;
fi
$2 < $3 > $1 #line 11
if diff $4 $1 > /dev/null; then
echo InOut V
exit 0
else
echo InOut X
exit 1
fi
私は次のように実行しようとしています:
./test file.log myecho echo.in echo.out
それは言う:line 11: command: myecho : not found
答え1
ここで何をしたいのかわかりませんが、問題はmyecho
これをプログラムとして実行しようとしていることです。関連ラインを見てみましょう。
$2 < $3 > $1
ここで、$2
はいmyecho
、$3
はい、echo.in
はい。したがって、実行中の内容は次のとおりです。$1
file.log
myecho < echo.in > file.log
スクリプトの出力によると、myecho
現在ディレクトリにあるファイルを呼び出しました(そうしないと、スクリプトにファイル2が存在しないと文句を言われます)。しかし、現在のディレクトリは明らかにあなたのディレクトリにありません。$PATH
。したがって、を実行しようとすると、myecho
システムはその名前の実行可能ファイルを見つけるためにディレクトリを検索しますが、見つからず文句を言います$PATH
。
最も簡単な解決策は、代わり./$2
に呼び出して、シェルではなく現在のディレクトリから呼び出されたファイルを$2
実行するようにシェルに指示することです。myecho
$PATH
または、現在のディレクトリをに追加することもできます$PATH
。~/.profile
PATH="$PATH:"
Trailingは:
現在のディレクトリ(それが何であれ)をに追加します。変更を適用するには、$PATH
ログアウトして再度ログインするか、手動でインポートする必要があります.profile
()。. ~/.profile
たとえば、攻撃者が現在のディレクトリに悪意のある実行可能ファイルをアップロードし、名前をls
。
答え2
11行目ではコマンドを実行しています$2
。
$2
結果は、与えられたスクリプトの2番目のパラメータとして評価されますmyecho
。
エラーメッセージから、シェルが名前付きコマンドが見つからないことがわかりますmyecho
。インストールされていない可能性があり、そのようなカスタムコマンドの場合は、間違ったディレクトリ(にあるディレクトリの外部$PATH
)にあるか、実行可能ファイルとして表示されていない可能性があります(chmod +x
)。