root@raspberrypi:~# cat >test
echo succeed
root@raspberrypi:~# <test
root@raspberrypi:~# `<test`
succeed
원인은 신호 손실인 것 같습니다. 그런데 enter
어떻게 보내지?enter
답변1
Bash 및 기타 일부 쉘에서는 `<test`
다음과 같은 약어입니다.`cat test`
:
명령 대체는
$(cat file)
동일하지만 더 빠른 명령을 대체할 수 있습니다$(< file
.
(-style 명령 대체도 마찬가지입니다 `...`
).
이것은 당신의 명령을 의미합니다
$ `<test`
동일합니까?
$ `cat test`
- 즉, test
명령 대체 표현식 대신 파일의 내용을 명령줄에 삽입한 다음 명령의 시작 부분에 있으므로,첫 번째 단어를 명령 이름 실행 결과로 사용.
반면에,
$ <test
표준 입력이 test
파일에서 리디렉션되는 빈 명령일 뿐입니다.POSIX와 유사한 쉘에서. 본질적으로 : <test
아무것도 하지 않고 성공하는 것과 같습니다 . 별로 유용하진 않지만,~ 할 것이다test
존재하지 않거나 읽을 수 없으면 오류가 발생합니다.
>test
생성하거나 자르는 반대 방향이 test
유용할 때도 있습니다.
`<test`
Bash, zsh, ksh 등의 특수한 무력화 동작은 $(<test)
명령 대체가 일반적으로 동일한 명령의 일반적인 동작을 복제하는 방식과 일치하지 않습니다. 이는 다음과 같은 명령에 대한 편의성 및 성능 기능입니다.
printf '%s@%s\n' $(<username.txt) $(<host.txt)
파일 내용을 명령줄로 읽고 추가 프로세스를 저장하려고 합니다(생성하지 않고 cat
쉘 자체가 파일을 읽도록 함으로써).
차이점은 그것이나 그런 것과는 아무 관련이 없습니다 Enter. 단지 특별한 경우일 뿐입니다. 나는 당신이 하고 있는 일을 명시하는 대신에 :use나 비슷한 방법을 사용 $(<file)
하여 파일을 실행하는 것을 권장하지 않습니다 . 사용을 권장하지도 않습니다..
source
eval
$(<file)
별말씀을요긴밀한 루프에 있다고 확신하지 않는 한 추가 cat
프로세스를 생성하는 것이 중요합니다. 여기서처럼 사람들이 혼란스러워할 수 있기 때문입니다. 이는 그리 자주 발생하는 일이 아닙니다.