UNIX 출력을 첨부 파일로 리디렉션

UNIX 출력을 첨부 파일로 리디렉션

그래서 저는 Unix 명령에 다양한 인수를 전달하는 Python 스크립트를 작성하고 있으며 모든 명령 출력을 동일한 파일에 저장해야 합니다.

그러나 내가 아는 유일한 방법은 파일을 다시 작성하는 것입니다. 쉘 스크립트에 파일을 추가하는 방법을 아는 사람이 있습니까?

내 Unix 명령이 다음과 같다고 가정해 보겠습니다.

Foo

내 교환원은 다음과 같습니다:

bar
bar1
bar2

유닉스 명령은 다음과 같습니다:

foo bar > output.txt
foo bar1 > output.txt
foo bar2 > output.txt

Output.txt의 내용은 "foo bar2"뿐입니다.

세 가지 명령 출력이 모두 출력 파일에 나타나도록 파일을 추가하는 방법을 아는 사람이 있습니까?

답변1

세 가지 개별 명령은 output.txt각각 새 데이터를 쓰기 전에 파일을 지웁니다. 이것이 파일이 마지막으로 실행된 명령에 대한 데이터만 포함하게 되는 이유입니다.

일련의 명령을 사용할 수 있는 파일로 리디렉션하려면

{
    foo bar
    foo bar1
    foo bar2
} >output.txt

아니면 한 줄로,

{ foo bar; foo bar1; foo bar2; } >output.txt

중괄호는복합 명령. 리디렉션 종료 }후 리디렉션모두복합 명령의 전체 출력입니다.

를 사용하고 있으므로 >복합 output.txt명령의 출력이 파일에 기록되기 전에 파일이 비워집니다. 파일에 추가하려면 >>.


또 다른 옵션:

for operand in bar bar1 bar2; do
    foo "$operand"
done >output.txt

또는 중괄호 확장이 포함된 셸에서

for operand in bar{,1,2}; do
    foo "$operand"
done >output.txt

여기서 forloop는 복합명령어로 { ...; }위의 복합명령처럼 방향전환이 가능합니다.

마찬가지로, 파일의 원래 내용을 유지 output.txt하고 파일에 추가만 하려는 경우 리디렉션에 >>대신 사용하세요.>

답변2

마지막 두 명령에서는 이전처럼 내용을 완전히 바꾸는 대신 내용을 추가하는 >>대신을 사용해야 합니다 .>>

답변3

그래서 포스팅하고 몇 분 만에 이 사실을 알게 됐어요.

대답은 다음 >과 같이 교체하는 것입니다.>>

구문은 다음과 같습니다.

foo bar >> output.txt
foo bar1 >> output.txt
foo bar2 >> output.txt

싱글은 >파일에 기록됩니다.

double이 >파일에 추가됩니다.

답변4

Unix 셸에서는 >>(더 큰) 기호를 사용하여 파일에 추가할 수 있습니다.

command >> file.txt

관련 정보