쉘코드를 보다가 이 명령어가 다른 쉘코드 사이에 쓰여 있는 것을 발견했습니다.
>filename.txt
이 명령이 무엇을 하는지 몰랐기 때문에 데스크탑에서 시도해 보았습니다. 나는 쉘 스크립트를 만들고 쉘 스크립트에 이 명령을 썼는데 스크립트를 실행했을 때 아무 일도 하지 않는다는 것을 발견했습니다. >myfile.txt 이것은 무엇을 하는가?
답변1
당신이 쓴대로아무것도 없다리디렉션 기호 앞 >
:
>filename.txt
말 그대로리디렉션 아무것도 없다입력하다 filename.txt
. 이는 일반적으로 텍스트 파일의 내용을 지우거나 지우기 위해 수행됩니다. 아직 존재하지 않는 경우 filename.txt
생성됩니다.
답변2
> file
리디렉션 명령 없이 리디렉션만 가능합니다. 쉘에 따라 다음과 같습니다.
- 구문 오류(Thompson shell
csh
,,,tcsh
)fish
- 그것은 작동한다빈 명령(
zsh
, 참조info zsh NULLCMD
) 출력이 로 리디렉션됩니다file
. - 리디렉션을 수행합니다(여기서 파일은 truncate(
O_TRUNC
), with 및 옵션이 설정된 경우 with 를 사용하여 쓰기 위해 열림O_CREAT
). 그런 다음 명령이 제공되지 않았기 때문에 아무 것도 하지 않고 해당 파일 설명자를 닫습니다( Bourne의 쉘( /emulation)을 제외하고, 쉘과 유사합니다.O_EXCL
noclobber
zsh
sh
ksh
rc
이 코드는 파일을 자르거나 빈 내용으로 생성하기 위해 제3등급 셸용으로 작성되었을 가능성이 높습니다.
보다 이식 가능한 접근 방식은 출력을 생성하지 않는 명령을 리디렉션하는 것입니다.
printf '' > file
[ . ] > file
true > file # printf, [ and true are builtins in many shells
eval > file # eval is built-in in all shells but note that in POSIX ones, that
# causes the shell to exit if the file can't be opened. Bourne-like
# shells also have a ":" builtin with the same side-effect.
noclobber
옵션이 켜져 있어도 강제로 잘림:
true >! file # csh (where noclobber comes from), tcsh, zsh
true >| file # ksh/POSIX (and zsh)
답변3
이 명령은 > myfile.txt
파일을 생성하거나 파일 내용이 있는 경우 지우기만 합니다.
또한 이 명령은 이전 명령이 있는 경우 .txt 파일에 대한 속성을 지정합니다. 예를 들어, 폴더의 내용이 포함된 파일을 생성하려면 다음을 수행할 수 있습니다 ls -1 > myfile.txt
. 이렇게 하면 파일 이름과 디렉터리 이름이 한 줄씩 포함된 파일이 생성됩니다.
이를 스크립트의 로그 파일로 사용할 수도 있으므로 명령은 화면에 출력을 표시하는 대신 출력을 파일에 저장합니다.
답변4
filename.txt와 같은 명령은 없습니다. filename이라는 이름의 텍스트 파일일 뿐입니다.
제목에서 물어보셨듯이
>filename.txt가 쉘 스크립트에서 수행하는 작업
">"는 명령 출력을 텍스트 파일로 리디렉션하는 데 사용됩니다. 예를 들어 터미널에서 다음 명령을 실행하면
ifconfig > filename.txt
그러면 ifconfig 명령의 출력이 터미널에 표시되지 않습니다. 하지만 작업 디렉터리에 새 파일이 생성되거나, 동일한 파일이 거기에 있으면 새 파일을 덮어쓰게 됩니다. filename.txt 파일에서 이 명령의 출력을 읽을 수 있습니다.