을 사용하여 zsh
다음을 수행하는 별칭이나 셸 함수를 만들고 싶습니다.
<
이 별칭 또는 셸 함수가 또는 >
또는 &
또는 또는 $
또는 "
기타와 같은 셸 제어 문자를 따르지 않고 명령줄을 에코하도록 하고 싶습니다 .
즉, 제안된 별칭 또는 셸 함수의 이름으로 "xxx"를 사용하는 다음 예를 고려해 보세요.
xxx ls -Flastr "${something}" >/tmp/xyz &
>
and &
및 $
and {
and }
and 및 "
이러한 특수 문자를 존중하지 않고 실행하지 않고 다음을 단순히 에코합니다 .
ls -Flastr "${something}" >/tmp/xyz &
"xxx" 뒤에 명령줄의 나머지 부분을 인용하고 특정 문자를 이스케이프하면 이 작업을 수행할 수 있다는 것을 알고 있지만 추가로 인용하거나 이스케이프하지 않고 이를 달성할 수 있는 방법을 찾고 있습니다.
또한 전체 스크립트가 아닌 이 별칭이나 셸 함수를 통해 호출된 한 줄에 대해서만 작동하기를 원합니다.
이것이 가능한가 zsh
?
미리 감사드립니다.
답변1
이를 수행하는 한 가지 방법은 로 끝나는 별칭을 작성하고 #
나머지 줄을 주석으로 만든 다음 기록에서 해당 줄을 추출하는 것입니다. 댓글을 활성화하는 데 필요합니다 setopt interactive_comments
. 그러나 인쇄를 시작할 위치를 아는 것은 어려울 수 있습니다. 이 간단한 버전은 전체 줄을 인쇄합니다.
function xxx_function { print -lr -- ${history[$HISTCMD]}; }
alias xxx='xxx_function #'
답변2
이것은 Stéphane Chazelas가 제안한 변형이며 나에게 효과적이었습니다. 아래 Stéphane Chazelas의 의견을 바탕으로 원래 "답변"을 수정했습니다.
set -o interactive_comments -o extendedglob
_donothing() {}
alias '@=_donothing # '
handle_@() {
[[ "${2}" == _donothing ]] && {
print -r - "${1}"
}
return 0
}
preexec_functions=(handle_@)