我有一個程序,用戶可以使用命令行運行。一旦運行,它就會接收並處理來自鍵盤的命令。從磁盤輸入啓動程序是可能的,如下所示:$ ./program < startScript.sh
。但是,只要腳本運行完畢,程序就會退出。有沒有辦法通過使用<
的磁盤輸入來啓動程序,該程序不會退出程序並允許讀取其他鍵盤輸入?是否有可能從命令行啓動程序並輸入文件而不終止程序?
回答
在程序中使用系統(「暫停」)(在bash中它只是「暫停」),以便它不立即退出。
有替代品,如
- 僞讀出
- 無限循環
- sigsuspend
- 更多
這就要看program
是如何編碼。從startScript.sh
開始編寫代碼是無法實現的,如果這正是您想要實現的。
你可以做的是寫一個callingScript.sh
,首先要求輸入,然後調用program < startScript.sh
。
startScript.sh未在上述調用中執行,因此將其作爲輸入。 – 2013-03-10 08:07:01
啊,你說得對。我已經編輯了它:) – 2013-03-10 08:18:15
是否可以將腳本傳遞給程序並獲得該程序的提示? – 2013-03-10 08:25:08
(cat foo.txt; cat) | ./program
即,創建一個子shell(這就是括號做),這首先輸出foo.txt的的,之後只是複製無論用戶類型的內容。然後,獲取這個子shell的組合輸出並將其輸入到程序的stdin中。請注意,這也適用於其他組合。假設你想開始一個總是詢問相同問題的程序。最好的方法是使用「預期」,並確保這些問題並沒有改變,但對於一個快速的解決方法,你也可以做這樣的事情:
你能解釋一下這是什麼嗎?我是一名新手shell腳本程序員。 – 2013-03-10 08:08:56
添加了一些解釋。 – 2013-03-10 08:13:47
感謝您的幫助!但是這與追加原始腳本沒有相同的效果嗎?無論如何,我嘗試了你的建議,雖然它允許額外的輸入,但它不會返回程序的提示 – 2013-03-10 08:22:22
爲什麼不嘗試這樣的事情
BODY=`./startScript.sh`
if [ -n "$BODY" ]
then cat "$BODY" |./program
fi
- 1. 是否有終端程序區分輸入,輸出和命令?
- 2. QProcess可以啓動程序但不能啓動python(命令行)
- 3. 通過PHP從命令行運行程序 - 傳遞命令,而不是每次都重新啓動程序
- 4. WPF應用程序命令行參數,而不是啓動GUI
- 5. 從命令行啓動應用程序
- 6. 如何讓程序從GUI輸入而不是命令promt
- 7. 批處理文件/命令通過命令行啓動程序
- 8. 是否可以從用戶輸入重新啓動程序?
- 9. 從命令行運行應用程序並啓動瀏覽器
- 10. 是否可以從32位應用程序啓動64位命令行?
- 11. 配置MSI文件在安裝時啓動並終止程序
- 12. Python,啓動一個.py程序並終止以前的程序
- 13. 是否有停止程序並仍保存數據的命令?
- 14. 爲什麼從Windows啓動時運行程序而不是命令提示符?
- 15. 啓動和停止一個(命令行)程序並得到它的輸出
- 16. 是否有可能在啓動時運行AIR應用程序?
- 17. 是否有可能從c make文件運行python程序?
- 18. 是否有可能作爲子線程執行命令行應用程序?
- 19. 可能啓動命令行空氣應用程序?
- 20. 以編程方式確定是否從命令行啓動AIR應用程序?
- 21. 從用戶輸入獲取shell命令並執行C程序
- 22. Java應用程序命令行啓動
- 23. 當輸入「退出」而不是第一個輸入數據時終止程序
- 24. 如何保持我的程序輸出終止並再次啓動程序而不丟失數據?
- 25. supervisord是否使用重新啓動命令終止正在運行的進程?
- 26. XCode 4.5應用程序文件啓動安裝程序,而不是程序?
- 27. 是否有可能從asp .net應用程序運行linux配置命令
- 28. 爲什麼外部可執行文件沒有從終端命令行手動輸入時不能運行?
- 29. 從python終止一個linux命令行實用程序
- 30. 可能使用Powershell將命令輸入到第三方命令行程序中?
我應該說明我只能修改從磁盤運行的腳本,而不是程序本身。 – 2013-03-10 08:02:44
我不記得bash等到程序結束的時候。 – Dmitry 2013-03-10 08:03:49
我擔心你可能需要訴諸回憶可執行文件的pid,並不斷地調查kill -0。 – Dmitry 2013-03-10 08:05:05