따라서 다음 예에서는 다음과 같습니다.
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
.