루트 모드에서 "|" 명령을 실행할 때 문제가 발생했습니다. 명령은 다음과 같습니다.
cat xyz.sh | chmod 744 xyz.sh | echo "hello" > xyz.sh
다음을 사용하여 이 명령을 실행할 때./xyz.sh,에러 발생됨
./xyz.sh: line 1: hello: command not found
저를 지정해주세요. 내가 뭔가 잘못했다면 어쩌지!
답변1
먼저, 이해해야 합니다.파이프라인이 뭐야?:
파이프라인은 제어 연산자로 구분된 하나 이상의 명령 시퀀스입니다
|
. 마지막 명령을 제외한 각 명령에 대해 쉘은 명령의 표준 출력을 다음 명령의 표준 입력에 연결해야 합니다.
파이프라인에서는 다음과 같은 일이 발생합니다.
cat
내용을xyz.sh
다음 명령의 표준 입력으로 보냅니다.chmod
해당 데이터를 수신하지만 내가 아는 한 해당 데이터로 아무 작업도 수행하지 않습니다. 대신, 다음 명령의 권한을 변경xyz.sh
하고 표준 입력으로 아무것도 보내지 않습니다.echo
echo
아무것도 수신되지 않지만 표준 입력은 처음부터 읽히지 않으므로 중요하지 않습니다 . ~처럼강철 드라이버echo
내용을 단어로 덮어 보세요 .xyz.sh
hello
그런 다음 를 실행하려고 하면 xyz.sh
쉘이 찾은 유일한 명령문은 명령으로 실행을 hello
시도합니다 . 설치된 명령이 hello
없으므로 오류가 발생합니다.hello
command not found