zsh 별칭에서 heredoc 사용

zsh 별칭에서 heredoc 사용

zsh예를 들어 별칭으로 heredoc을 사용하고 싶습니다 .

alias runthing="cd ~; date << HERE
date
HERE"

그러나 이 별칭을 실행할 때마다 쉘은 마치 heredoc를 종료하지 않은 것처럼 동작하고 다음을 표시합니다.

➜  ~ runthing
heredoc>

여기에 해당 줄을 입력하면 heredoc>명령이 완료되지만 그렇게 하고 싶지는 않으므로 별칭을 사용합니다. 차이가 있다면 oh-my-zsh를 사용하고 있습니다.

zsh 별칭과 함께 heredoc을 올바르게 사용하는 방법은 무엇입니까?

답변1

여기서 문서 구분 기호는 별칭의 구분선이어야 합니다 zsh(Enter 키를 누를 때 해당 구분 기호를 추가했기 때문에 버그처럼 보입니다).

alias runthing='cd; date << HERE
date
HERE
'

하지만 여기서는 별칭을 사용하는 것이 잘못되었습니다. 예를 들어 다음을 고려하십시오.

echo foo || runthing

이는 단지 코드 텍스트 교체의 한 형태이기 때문에 alias(별칭은 먼저 csh 함수이고 csh에는 함수가 없음)

echo foo || cd; date...

date이는 성공하더라도 실행된다는 의미입니다 .echo

여기서 함수를 사용하는 것이 더 나을 것입니다.

runthing() {
  cd && date << EOF
date
EOF
}

date(물론 표준 입력을 읽지 않는다는 점을 고려하면 구분 기호를 제공하는 것은 별 의미가 없습니다 date. 이는 단지 예일 뿐이라고 가정하고 있습니다.)

관련 정보