비슷한 질문인데 답변이 없습니다.변수에 저장된 명령을 어떻게 실행할 수 있나요?
Bash 스크립트에서 다음을 어떻게 수행할 수 있나요?
error=">&2"
echo 'something went wrong' $error
바꾸다
echo 'something went wrong' >&2
왜?
오타를 내면 >2&
잘 작동하지만 이라는 오류 메시지가 작성되기 때문입니다 2
.
답변1
댓글에서 말했듯이, 당신은 정말로 모릅니다.
eval
글쎄, 당신은 그것을 할 수 있습니다기타명령줄에서.
그러나 함수를 사용하여 몇 가지 작업을 수행할 수 있습니다. 리디렉션에서 주어진 간단한 명령을 실행하거나 stderr에 메시지를 작성합니다.
#!/bin/bash
tostderr() {
"$@" >&2
}
warn() {
local IFS=" "
printf "%s\n" "$*" >&2
}
tostderr printf "warning: %s\n" "something happened"
warn another thing to warn about
강조하다단순한명령은 첫 번째 명령에 있지만 그렇지 않으며 eval
명령에 셸 구문을 사용할 수 없습니다. 예를 들어, 출력을 파이프를 통해 stderr로 tostderr foo | bar
리디렉션만 하고 아무런 효과가 없습니다.foo
tostderr (foo | bar)
zsh를 사용하고 있고 정말로 이 작업을 수행하고 싶다면 전역 별칭을 사용하여 리디렉션을 추가할 수 있습니다(그러나 일부는 이것이 인코딩을 난독화하는 것에 가깝다고 생각할 수도 있습니다).
#/usr/bin/zsh
alias -g TOSTDERR='>&2'
echo something bad happened TOSTDERR