왠지 이 오류가 발생합니다. 아직 스스로 알아낼 수 없습니다.
이것은 내 스크립트입니다.
#!/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
결과는 주어진 스크립트의 두 번째 매개변수로 평가됩니다 myecho
.
오류 메시지에서 쉘이 이름이 지정된 명령을 찾을 수 없음을 알 수 있습니다 myecho
. 설치되지 않았을 수도 있고, 이와 같은 사용자 정의 명령의 경우 잘못된 디렉토리( 에 있는 디렉토리 외부 $PATH
)에 있거나 실행 파일로 표시되지 않았을 수도 있습니다( chmod +x
).