Bash의 변수를 기반으로 tee의 출력을 억제하는 방법

Bash의 변수를 기반으로 tee의 출력을 억제하는 방법

따라서 다음 예에서는 다음과 같습니다.

echo "text to write to file but also not send to stdout" | tee -a $logfile 1> /dev/null

출력이 터미널에 인쇄되지 않습니다. 하지만 변수를 기반으로 동일한 작업을 수행하려고 하면 작동하지 않습니다.

전:

$loud=""
if [ -z $loud ]; then
  route_devnull="1> /dev/null"
else
  route_devnull=""
fi
echo "text to write to file but also not send to stdout" | tee -a $logfile $route_devnull

두 번째 예제가 작동하도록 하려면 어떻게 해야 합니까? 아니면 메시지를 억제하는 다른 방법을 시도해야 합니까?

답변1

요약:echo "text to write to file but also not send to stdout" | eval tee -a $logfile $route_devnull

bash변수를 명령으로 평가하지 않습니다. 당신은 쓸 수 있습니다

echo "abc && touch new"

abc && touch new터미널에 인쇄됩니다 . 이는 사용자가 문자열을 입력할 수 있고 컴퓨터를 손상시키려는 악의적인 작업을 수행할 수 있으므로 사용자의 명령을 신뢰하고 싶지 않기 때문에 의도적으로 설계된 것입니다.

이곳은eval들어 온다.

명령을 먼저 실행하는 대신 eval은 읽고평가하다모든 인수를 사용하여 다른 명령을 구성한 다음 실행합니다. 예:

eval echo "abc && touch new"

eval실행하기 전에 평가하려는 항목 앞에 밀어 넣으세요 . 그리고 "그냥 밀다"라는 말은 "사용에 대해 매우 신중하게 생각하라"는 뜻입니다 eval.

관련 정보