중복 가능성:
분리된 화면에 텍스트 입력 보내기
참고 질문에 대한 답변: 외부에서 스크린 세션에 입력 보내기
screen
명령을 생성 한 다음 stuff
실행하려는 셸에 해당 명령(제 경우에는 UNIX 명령)을 입력하는 스크립트를 작성하려고 합니다 .
이것이 내가 지금까지 가지고 있는 것입니다:
$ screen -dmS new_screen bash
$ screen -S new_screen -X stuff "cd /some/path/
some_script_file.sh
" <--This new line is required to execute the above command.
$ # Note: See comments. We could insert the newline character instead of 'hard-coding' a newline string literal.
어떤 이유로 화면이 잘 생성되고 bash
쉘로 들어갑니다. 그러나 cd
및 some_script_file.sh
명령은 화면의 bash 쉘을 채우지 않습니다.
이제 정말 이상한 부분은... 화면에서 벗어나 아래의 stuff 명령을 다시 실행한다는 것입니다...
$ screen -S new_screen -X stuff "cd /some/path/
some_script_file.sh
"
그런 다음 new_screen을 다시 추가하세요. 이제 화면 내의 bash 셸에서 명령이 올바르게 채워지고 실행되는 것을 볼 수 있습니다.
여기서 내가 어디로 잘못 가고 있는지 잘 모르겠지만 아직 연결되지 않은 화면에 명령을 채우는 데 문제가 없는 것 같습니다.
답변1
처음 화면 세션을 생성할 때는 창이 선택되지 않습니다. 따라서 명령을 보낼 때 화면은 명령을 보낼 창을 알 수 없습니다. 하지만 일단 화면에 연결되면 창이 선택되기 때문에 이렇게 한 후에 명령을 보낼 수 있습니다. 명령줄에서 창을 선택하려면 이 옵션을 사용해야 합니다 -p
.
작동해야 하는 명령의 수정 사항은 다음과 같습니다.
screen -S new_screen -p 0 -X stuff "cd /some/path/
some_script_file.sh
"
답변2
@vgoff:"그러므로 문자열로 리터럴을 반환하십시오. 파이프와 함께 사용할 수 있습니까? 여전히 마지막 문자로 반환해야 합니까? - vgoff"
반환 리터럴 또는 반환 문자(^M)를 사용하여 보기:
bash-3.00$ echo "(1) This sentence
> (2) has
> (3) 3 returns
> (4) in it.
> " | grep "has";
(2) has
리터럴을 반환해도 파이프에는 영향을 미치지 않는 것 같습니다. 실행을 위해 echo 문을 보내려면 인용문을 끝내기 전에 RETURN 키로 반환해야 합니다.