변수에 ">&2"를 저장하는 방법

변수에 ">&2"를 저장하는 방법

비슷한 질문인데 답변이 없습니다.변수에 저장된 명령을 어떻게 실행할 수 있나요?

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리디렉션만 하고 아무런 효과가 없습니다.footostderr (foo | bar)


zsh를 사용하고 있고 정말로 이 작업을 수행하고 싶다면 전역 별칭을 사용하여 리디렉션을 추가할 수 있습니다(그러나 일부는 이것이 인코딩을 난독화하는 것에 가깝다고 생각할 수도 있습니다).

#/usr/bin/zsh

alias -g TOSTDERR='>&2'
echo something bad happened TOSTDERR

관련 정보