sleep 명령을 tmux new-session -d에 전달하는 것과 아무것도 전달하지 않는 것의 차이점은 무엇입니까?

sleep 명령을 tmux new-session -d에 전달하는 것과 아무것도 전달하지 않는 것의 차이점은 무엇입니까?

나는 tmux stdin에 텍스트를 보내는 스크립트를 가지고 놀고 있습니다( 이 답변에 따라https://unix.stackexchange.com/a/773049/189571작성자: @Kamil Maciorowski) 실수로 이런 일을 했습니다.

tty=$(tmux new-session -d -s aux -PF "#{pane_tty}")
echo -n foo > $tty && tput cr > $tty && echo bar > $tty
tmux capture-pane -t aux -p -S0 -E3

결과는 다음과 같습니다. foo PROMPT %> bar(무한정 정렬되어 PROMPT를 인쇄함)

그리고 Camille의 제안에 따라 동일하지만 tail -f /dev/nulltmux new-session에 대한 인수로 명령을 사용하면 bar내가 기대했던 결과가 나옵니다.

꼬리가 없으면 모든 것이 실패하는 이유를 이해하고 싶습니다. 여기 tail -f /dev/null한 명 밖에 없나요 sleep infinity? 명령을 전달하지 않는 것과 차이점은 무엇입니까? 즉, 새 세션에 아무것도 전달하지 않으면 세션이 종료될 때까지 창이 활성 상태로 유지됩니다.

답변1

tmux new-session새 tmux 세션의 새 tmux 창에 있는 새 tmux 창에서 명령을 실행하려면 명령을 사용하세요.

tmux new-session대신 명령 없이 대화형 셸을 시작하세요.

귀하의 경우에는 PROMPT %>쉘에 의해 인쇄된 프롬프트입니다. 나는 귀하의 echos 라인이 즉시 실행되어 경쟁 조건이 있고 프롬프트가 the 및 tty (창에서) 전후 또는 사이에 foo도착할 수 있다고 추측합니다 .barfoobar

tput cr > $$tty$$행을 구문 분석한 쉘의 PID로 확장되므로 필수 tty에는 아무것도 인쇄되지 않습니다 . left 또는 right라는 일반 파일을 만들었을 가능성이 높으며 해당 파일 12345tty의 출력은 tput해당 파일 안에 있습니다.

관련 정보