エラー:コマンドが見つかりません

エラー:コマンドが見つかりません

なぜかこのエラーが発生します。まだ自分で把握できません。

これは私のスクリプトです。

#!/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はい。したがって、実行中の内容は次のとおりです。$1file.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)。

関連情報