변수에 '>&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명령 내에 쉘 구문을 사용할 수 없습니다. 예를 들어, tostderr foo | bar출력을 foo(파이프를 지나 stderr로) 리디렉션하고 tostderr (foo | bar)작동하지 않습니다.


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

#/usr/bin/zsh

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

관련 정보