"At" 유틸리티를 사용한 후에 bash를 자유롭게 사용할 수 없는 이유는 무엇입니까? (ctrl+c까지 stdin을 삽입할 수 없음)

"At" 유틸리티를 사용한 후에 bash를 자유롭게 사용할 수 없는 이유는 무엇입니까? (ctrl+c까지 stdin을 삽입할 수 없음)

다음 코드 블록을 실행했습니다( atPHPmyadmin 제거 시간 초과). 2horus를 먼저 실행하도록 예약해야 하지만 테스트를 위해 2분의 시간 초과로 실행했습니다.

bash /dev/fd/50 50<< PMA_UNINSTALL | at 'now + 2 minutes'

apt-get purge phpmyadmin -y
PMA_UNINSTALL

at유틸리티는 내가 CTRL+ 를 하지 않는 한 Bash를 자유롭게 사용하는 것을 막는 것 같습니다 C. At또한 다음과 같은 경고 메시지가 표시됩니다. 이는 정상적인 현상이며 유틸리티 소스 코드에 하드코딩되어 있습니다. CTRL+를 수행하면 C경고가 사라지고 Bash를 다시 정기적으로 사용할 수 있습니다.

명령은 /bin/sh를 사용하여 실행됩니다.

나는 그것이 나타나는 동안 Bash를 정기적으로 사용하지 못하게하는 경고라고 말하지 않습니다. 나는 경고가 표준 출력일 뿐이고 다른 이유로 표준 입력을 생성하지 못할 수도 있다는 것을 알고 있습니다.

위 코드 블록을 사용하여 stdin 파이핑을 생성하는 것을 방해하는 이유는 무엇이며 at으로 파이프된 명령을 실행할 수 있지만 작업을 at중단하지 않고 바로 Bash를 자유롭게 사용할 수 있는 상태에 도달하려면 어떻게 해야 합니까 ?at

답변1

at실제 문제를 확인하는 데 시간이 좀 걸렸습니다. 제가 가정한 대로 나중에 명령을 제공하는 대신 직접 명령을 보내고 싶습니다 .

복잡한 구성이 필요하지 않습니다. 그냥 입력하면 됩니다.

echo 'apt-get purge phpmyadmin -y' | at 'now + 2 minutes'

이렇게 하면 at나중에 입력이 필요하지 않으며 즉시 명령줄로 돌아갑니다.


(여기서 원래 답변을 유지)

발행을 통해 at실행할 명령을 나열할 수 있습니다. 당신은 at당신이 끝났다고 말해야합니다 :

CTRL+를 누릅니다 D(이것은 다음과 같이 알려져 있습니다.전송 종료)

답변2

요약: 해당 명령은 의도한 대로 실행되지 않는 것 같습니다.

2분 안에 at실행을 시도한다면 코드는 원하는 대로 작동하지 않을 것입니다.apt-get purge phpmyadmin -ybash

파이프 왼쪽에 있는 명령( |)에는 여기 문서가 표준 입력으로 포함되어 있습니다. 해당 명령은 쉘이 여기 문서 전체를 읽을 때까지 실행되지 않습니다.

에서3.6.6 여기 문서에서배쉬 참조 매뉴얼:

이러한 유형의 리디렉션은 다음 항목만 포함하는 행이 나올 때까지 현재 소스에서 입력을 읽도록 쉘에 지시합니다.단어(후행 공백 없음)이 표시됩니다. 해당 지점까지 읽은 모든 줄은 표준 입력(또는 파일 설명자)으로 사용됩니다.N만약에N지정됨)에 대한 명령입니다.

here 문서가 포함된 명령은 실제로 실행되기 전에 셸에서 완전히 읽어야 하는 단일 명령입니다. 코드에서 쉘은 입력을 읽습니다.~까지 PMA_UNINSTALL한 줄에 그 자체로 나타납니다. 그런 일이 발생하면 쉘은그 다음에여기 문서의 내용을 명령의 파일 설명자 50으로 사용합니다 bash /dev/fd/50.

bash해당 명령은 여기 문서를 완전히 읽을 때까지 새 인스턴스를 시작하지도 않습니다 . bash실행 되면 다음 명령이 실행됩니다.

apt-get purge phpmyadmin -y

파이프의 왼쪽 전체가here 문서를 포함하여표준 출력이 로 파이프되면 at입력 at은 다음과 같습니다.산출bash출력은 입니다 apt-get purge phpmyadmin -y. at그런 다음 해당 출력을 해석하려고 시도합니다. apt-get명령이 아니라산출-- 에서 실행할 명령 목록입니다 /bin/sh.

따라서 이것은 당신이 하려는 것이 거의 확실하지 않습니다.

해당 코드를 입력한 직후에 쉘 프롬프트가 다시 표시되지 않는 이유가 무엇인지 잘 모르겠습니다. 테스트 머신에서 실행하면 몇 초 안에 쉘 프롬프트가 다시 나타납니다. 이를 디버깅하려면 apt-get purge phpmyadmin -ybash에서 대화형으로 실행해 볼 수 있습니다. 코드가 작성된 방식에 따라 해당 명령은 완전히 실행됩니다.~ 전에 at쉘로 돌아갑니다(그리고 at무엇이든 예약하기 전에). 하지만 이 특정 코드를 더 이상 디버깅하는 것은 아마도 유용하지 않을 것입니다.

관련 정보