簡體   English   中英

如何從 TCL 腳本執行 shell 腳本

[英]How to execute a shell script from a TCL script

我有一個 Shell 腳本,它讀取另一個文件作為參數。 在 Shell 終端中,我使用它如下:

source checker.sh waiver.file

現在,我想在 TCL 腳本中獲取這個 shell 腳本,如下所示
TCL_script.tcl

link
set RUN .
exec checker.sh waiver.file

當我執行上面的 TCL 腳本時,終端只是掛起,它不起作用。

這里的任何專家可以幫助我在 TCL 腳本中運行 Shell 腳本嗎?

謝謝!

如何運行它主要取決於checker.sh工作原理。 問題在於 shell 的source命令通過讀取腳本並在當前 shell session 中執行它來工作(Tcl 的source工作方式類似,但它用於不同的語言)。 因為它在同一個 session 中,所以它可以訪問各種功能,它實際上不會作為子進程(或者更確切地說它會擁有它們,但它們不會持續存在)。

從 Tcl 運行它的簡單方法是這樣的(假設你在正確的目錄中):

exec sh checker.sh waiver.file

如果有問題,我不會感到驚訝! 不幸的是,可能的問題非常廣泛,以至於很難提前猜測如何解決它們。

也就是說,您遇到問題的事實有用的信息。 這可能意味着腳本正在嘗試以對管道不太滿意的方式訪問標准輸入和輸出。 我們可以嘗試通過重定向來解決這個問題:

exec sh checker.sh waiver.file <@stdin >@stdout 2>@stderr

如果這不起作用,您可能需要使用 Expect 運行。 expect程序是 Tcl,但有一些額外的命令。 這可能足以讓您入門:

spawn sh
send "source checker.sh waiver.file\r"
interact

很好地使用 Expect 還有很多。

(重寫checker.sh可能會更容易;這里的細節非常重要。)

暫無
暫無

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

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