오류: 명령을 찾을 수 없습니다

오류: 명령을 찾을 수 없습니다

왠지 이 오류가 발생합니다. 아직 스스로 알아낼 수 없습니다.

이것은 내 스크립트입니다.

#!/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

여기요, $2myecho, $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결과는 주어진 스크립트의 두 번째 매개변수로 평가됩니다 myecho.

오류 메시지에서 쉘이 이름이 지정된 명령을 찾을 수 없음을 알 수 있습니다 myecho. 설치되지 않았을 수도 있고, 이와 같은 사용자 정의 명령의 경우 잘못된 디렉토리( 에 있는 디렉토리 외부 $PATH)에 있거나 실행 파일로 표시되지 않았을 수도 있습니다( chmod +x).

관련 정보