새 줄이 포함된 줄에 "eval" 명령을 어떻게 쓸 수 있나요?

새 줄이 포함된 줄에 "eval" 명령을 어떻게 쓸 수 있나요?

Bash에서 같은 줄에 별칭을 설정하고 사용해야 하므로 다음을 사용하고 싶습니다.하우크라그~의해결책:

eval 'alias df5=df
df5 -h'

(예를 들어 dfand를 선택했습니다. 이 특정 예에서는 전체 명령을 로 바꿀 수 있다는 것을 알고 있습니다.)df5evaldf -h

하지만 나는 이 명령을 한 줄로 작성하는 것을 선호합니다.

eval새 줄이 포함된 명령을 한 줄에 작성하는 방법은 무엇입니까 ?


성공하지 못한 채 다음 한 줄 명령을 시도했습니다.

  • eval 'alias df5=df\ndf5 -h'. 실수-bash: alias: -h: not found
  • alias df5=df ; df5. 실수:No command 'df5' found
  • alias df5=df && df5(의 제안남자 이름). 실수:No command 'df5' found

답변1

당신이 사용하고 있기 때문에 bash:

eval $'alias df5=df\ndf5 -h'

이는 $'...'에 전달되기 전에 리터럴 개행 문자로 bash확장되는 "C 문자열"입니다 .\neval

다른 백슬래시 시퀀스도 확장될 수 있으므로 주의해야 합니다. 보다매뉴얼 QUOTING의 후반부bash.

답변2

여러 가지 해결 방법이 있지만 모두 다른 문자로 줄 바꿈을 작성한다는 아이디어에 의존해야 합니다. 가능한 첫 번째 솔루션인 이식 가능한 솔루션(아주 오래된 솔루션)은 변수 내부에 개행 문자를 가져오는 것입니다.

nl='
'
eval 'alias df5=df'"$nl"'df5 -h'

var에 명시적으로 줄바꿈을 지정하는 것이 이상해 보일 수 있습니다. 이 경우 다음을 사용할 수 있습니다.

  • Ansi-C 인용문(ksh, bash, zsh):

    nl=$'\n'
    
  • printf(대부분의 쉘):

    eval "$(printf "nl='\n'")"
    

그러나 다음 두 가지 아이디어를 직접 사용하여 별칭을 정의할 수 있습니다.

eval $'alias df5=df\ndf5 -h'
eval "$(printf "alias 'df5=df\ndf5 -h'")"

그러나 물론 줄바꿈을 잊어버리고 별칭을 다음과 같이 정의할 수 있습니다.

alias df5=df && df -h

그러나 이것이 귀하의 사용 사례에 적합한지는 확실하지 않습니다. :-)

관련 정보