이것이 내가 단계적으로 달성하려는 것입니다.
따라서 다음 한 줄 스크립트를 만들었지 만 오류가 발생합니다.
(ls | tac | echo >>) > ./foobar
여러 명령으로 분할하여이 작업을 수행 할 수 있지만 하나의 명령으로이 작업을 수행하려고합니다.
echo >> ./foobar
파일 끝에 새 줄을 삽입 하기 때문에 혼란 스럽습니다 .
그렇다면 내 코드 줄이 작동하지 않는 이유는 무엇입니까? echo >>
파일 설명자 끝에 새 줄을 추가하지 않고 대신 오류를 표시하는 이유 는 무엇 입니까? 내가 여기서 뭘 잘못하고 있니?
명령이 구문 분석되는 방법은 다음과 같습니다.
(…)
복합 명령입니다. 괄호의 내용은 서브 쉘에서 실행됩니다.
ls | tac | echo >>
ls
, tac
및 의 세 부분으로 구성된 파이프 라인 echo >>
입니다. 가장 왼쪽 부분의 출력은 두 번째 부분의 입력에 연결되고 두 번째 부분의 출력은 가장 오른쪽 부분의 입력에 연결됩니다.ls
실행 파일을 실행하는 간단한 명령입니다.tac
실행 파일을 실행하는 간단한 명령입니다.echo >>
구문 상 정확하지 않습니다. >>
연산자 파일명 뒤에해야하고, 파일 이름이 누락된다.> ./foobar
복합 명령의 출력을 파일로 리디렉션합니다 ./foobar
.입력을 지시하는 echo
것은 의미가 없습니다. 입력을 읽지 않습니다. echo
다른 명령의 출력에 추가하는 데 사용하려면 병렬이 아닌 다른 명령 echo
다음 에 실행 하십시오.
ls | tac; echo
The output of echo
is going to the same place as the output of tac
, so there's no need for any redirection.
( ls | tac; echo ) >./foobar
You don't need a subshell here. A simple grouping will do. (See Simple logical operators in Bash for a summary of bash's parenthesis-like operators.)
{ ls | tac; echo; } >./foobar
Using the >>
operator to append would only be needed if you were appending to an already-existing file. This is not the case here: all the commands go to the same location, the file foobar
is only opened once, and remains open as long as the whole compound command is executing. The >>
operator would be needed if you opened the file twice:
ls | tac >./foobar; echo >>./foobar
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다