簡體   English   中英

從腳本直接運行命令到另一個進程

[英]Run a command from a script directly to another process

我目前正在研究與其他進程進行交互的腳本。 如果相關,則所述過程是simdebug控制台。 我想要的是正確退出它,因為當我殺死進程本身時,它會創建一個鎖定文件.lck。 Simdebug控制台正在等待輸入,並在接收到quit之后關閉,然后依次按下q和n(分別由回車按鍵來驗證命令)。

我設法使用發送了一些命令到Simdebug

echo quit > /proc/< PID >/fd/1

但是它只打印回顯的結果,我找不到發送回車按鍵的方法,只有新行'\\ n'。

我不能設法發送一個退出命令,該命令將直接在Simdebug中執行,而不是在發送該命令的終端中執行。

如果回答了這兩點之一,我的問題就會解決:

  • 是否有可能模擬驗證按鍵,如下所示:術語1:echo ifconfig; echo <enter keypress>然后執行術語2的讀取緩沖區中的內容

  • 有沒有辦法在另一個過程中已經執行命令

條款1:<未知語法> pwd

術語2 <顯示term2的pwd而不是term1>

這將不僅在終端之間運行,而且在讀取模式下已經打開了進程。

這實際上是一件很難的事情。 如果將字符從另一個主終端發送到/ proc / self / fd / 0設備或類似的stdin設備鏈接,則它將字符輸出到另一個進程的主終端的輸出側。

有了這樣的工具expectpdipscreen ,你可以,如果它來自其主終端發送你想封裝在他們的虛擬終端的過程東西。 但是,如果某個進程正在運行,那么它將已經擁有自己的終端。

如果可以說服您的控制台使用reptyr進行控制性終端傳輸,那么可能會很幸運。

例如,如果您的控制台具有進程ID 999999(並且您已經安裝了screenreptyr並且也許做了一些事情來安撫selinux或apparmor / yama保護):

screen -dmS automateconsole
screen -S automateconsole -p 0 -X stuff 'reptyr 999999^M'
screen -S automateconsole -p 0 -X stuff 'quit^M'
sleep 1s
screen -S automateconsole -p 0 -X stuff 'q^M'
sleep 1s
screen -S automateconsole -p 0 -X stuff 'n^M'
sleep 1s
screen -S automateconsole -p 0 -X stuff 'exit^M'

但請注意:

  • 您可能應該清理初始化控制台的程序。
  • 至少在Ubuntu上,我無法從其他SSH會話reptyr進程。

https://github.com/nelhage/reptyr

http://theterminallife.com/sending-commands-into-a-screen-session/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM