Bash에서 같은 줄에 별칭을 설정하고 사용해야 하므로 다음을 사용하고 싶습니다.하우크라그~의해결책:
eval 'alias df5=df
df5 -h'
(예를 들어 df
and를 선택했습니다. 이 특정 예에서는 전체 명령을 로 바꿀 수 있다는 것을 알고 있습니다.)df5
eval
df -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 문자열"입니다 .\n
eval
다른 백슬래시 시퀀스도 확장될 수 있으므로 주의해야 합니다. 보다매뉴얼 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
그러나 이것이 귀하의 사용 사례에 적합한지는 확실하지 않습니다. :-)