중첩된 명령을 사용하여 리디렉션

중첩된 명령을 사용하여 리디렉션

$command한 화면 인스턴스에서 다른 사용자로 실행 중입니다.
이는 다음 명령과 동등한 명령으로 실행됩니다(자세한 내용은 하단 참조).

su $USERNAME -c "screen -dmS $SCREENNAME $COMMAND"

좋은 결과. 문제는 출력을 $COMMAND일부 로그 파일(예: )로 리디렉션하고 싶다는 것입니다 $LOGFILE.

읽는 것보다 그냥 > $LOGFILE끝부분에 덧붙이는 게 결과인 것 같아서 어떻게 해야 할지 헷갈립니다. 괄호와 중괄호로 그룹화해 보았으나 오류가 발생하여 제대로 수행하지 못한 것 같습니다.screen$COMMAND

$COMMAND그러면 출력을 해당 항목 으로 어떻게 리디렉션합니까 $LOGFILE?


내가 실행 중인 코드는 다음과 "동등"합니다.

execute() {
  su $USERNAME -c "$*"
}
COMMAND="$SOMEDIR/$SOMEPROG $SOMEARGS"
execute screen -dmS $SCREENNAME $COMMAND

답변1

문제는 명령을 screen.

예를 들어 bash를 사용한다고 가정하면 다음과 같습니다.
su $USERNAME -c "screen -dmS $SCREENNAME bash -c \"$COMMAND > $LOGFILE\""

(괄호를 이스케이프 처리하는 것은 명령 전체를 bash에 전달하는 것입니다. 그렇지 않으면 의 출력 screen대신 의 출력을 리디렉션하는 문제가 $COMMAND다시 발생합니다)

관련 정보