한 줄의 heredocument - Bash에서 가능합니까?

한 줄의 heredocument - Bash에서 가능합니까?

cat3줄(시작자, 내용, 구분 기호)의 자연스러운 구문이 아닌 한 줄로 heredocument를 실행하고 싶습니다 . 리디렉션된 콘텐츠는 수동 텍스트 파일의 일부가 되도록 의도되었으며 해당 특정 파일에 가능한 한 많은 줄을 저장하고 싶기 때문에 이 작업을 수행해야 하는 이유는 대부분 미적 측면을 위한 것입니다.

이렇게 하면 cat <<< TEST > ~/myRep/tiesto tiesto TEST(보통 세 부분으로 나뉜다) 오류가 발생합니다.

tiesto: 해당 파일이나 디렉터리가 없습니다

테스트: 해당 파일이나 디렉터리가 없습니다.

Bash에서 한 줄 문서를 실행할 수 있습니까?

답변1

예, 하지만 당신은여기에 있는 문자열하나보다는여기 문서:

cat >"$HOME/myRep/tiesto" <<<'tiesto'

이는 문자열을 tiesto표준 입력으로 보내고 cat표준 출력의 리디렉션을 통해 문자열을 파일에 씁니다.$HOME/myRep/tiesto

here - strings는 표준 은 아니지만 적어도 구현되었습니다 zsh. , , , 그리고 .rcrcesakangaksh93bashmkshyash

답변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

관련 정보