cat
3줄(시작자, 내용, 구분 기호)의 자연스러운 구문이 아닌 한 줄로 heredocument를 실행하고 싶습니다 . 리디렉션된 콘텐츠는 수동 텍스트 파일의 일부가 되도록 의도되었으며 해당 특정 파일에 가능한 한 많은 줄을 저장하고 싶기 때문에 이 작업을 수행해야 하는 이유는 대부분 미적 측면을 위한 것입니다.
이렇게 하면 cat <<< TEST > ~/myRep/tiesto tiesto TEST
(보통 세 부분으로 나뉜다) 오류가 발생합니다.
tiesto: 해당 파일이나 디렉터리가 없습니다
테스트: 해당 파일이나 디렉터리가 없습니다.
Bash에서 한 줄 문서를 실행할 수 있습니까?
답변1
예, 하지만 당신은여기에 있는 문자열하나보다는여기 문서:
cat >"$HOME/myRep/tiesto" <<<'tiesto'
이는 문자열을 tiesto
표준 입력으로 보내고 cat
표준 출력의 리디렉션을 통해 문자열을 파일에 씁니다.$HOME/myRep/tiesto
here - strings는 표준 은 아니지만 적어도 구현되었습니다 zsh
. , , , 그리고 .rc
rc
es
akanga
ksh93
bash
mksh
yash
답변2
다음을 사용하여 여기에(여기에 있는 문자열 대신) 문서를 한 줄에 넣을 수 있습니다.
eval $'cat << TEST > ~/myRep/tiesto\ntiesto\nTEST'
기술적으로 이것은 한 줄의 코드이지만 $'...'
다시 사용할 수 있는 새로운 3줄의 코드로 확장됩니다 eval
.
를 사용하면 eval
언제든지 한 줄에 모든 쉘 코드를 넣을 수 있습니다.
지원되지 않는 쉘의 경우 $'...'
다음을 수행할 수 있습니다.
eval "$(printf 'NL="\n"')"; eval "cat << TEST > ~/myRep/tiesto${NL}tiesto${NL}TEST"
또는
eval "$(printf 'cat << TEST > ~/myRep/tiesto\ntiesto\nTEST')"
물론 여기에서는
echo tiesto > ~/myRep/tiesto
훨씬 더 간단해질 것입니다. 또는 여러 줄의 경우:
printf '%s\n' "line 1" "line 2" > ~/myRep/tiesto