그래서 저는 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
여기서 for
loop는 복합명령어로 { ...; }
위의 복합명령처럼 방향전환이 가능합니다.
마찬가지로, 파일의 원래 내용을 유지 output.txt
하고 파일에 추가만 하려는 경우 리디렉션에 >>
대신 사용하세요.>
답변2
마지막 두 명령에서는 이전처럼 내용을 완전히 바꾸는 대신 내용을 추가하는 >>
대신을 사용해야 합니다 .>
>
답변3
그래서 포스팅하고 몇 분 만에 이 사실을 알게 됐어요.
대답은 다음 >
과 같이 교체하는 것입니다.>>
구문은 다음과 같습니다.
foo bar >> output.txt
foo bar1 >> output.txt
foo bar2 >> output.txt
싱글은 >
파일에 기록됩니다.
double이 >
파일에 추가됩니다.
답변4
Unix 셸에서는 >>
(더 큰) 기호를 사용하여 파일에 추가할 수 있습니다.
command >> file.txt