我想使用pgrep
從命令行查找進程的pid。在外殼,這樣做是爲這樣:如何讓Tcl的exec運行一個命令,其參數用空格引用了字符串?
pgrep -u andrew -fx 'some_binary -c some_config.cfg'
但當我嘗試這個來自TCL,像這樣:
exec pgrep -u $user -fx $cmdLine
我得到:
p纖ep:無效選項 - 'c'
這是有道理的,因爲它看到這個:
pgrep -u andrew -fx some_binary -c some_config.cfg
但它同樣當我添加單引號:
exec pgrep -u $user -fx '$cmdLine'
而這也有道理,因爲單引號不是特別的Tcl的。我認爲這是考慮'some_binary
的一個論點,然後是-c
,然後是some_config.cfg'
。
我也試過:
exec pgrep -u $user -fx {$cmdLine}
和
set cmd "pgrep -u $user -fx '$cmdLine'"
eval exec $cmd
無濟於事。
從我的閱讀中看來,Tcl 8.5+中的{*}
功能可能有所幫助,但我公司的基礎架構運行的是Tcl 8.0.5。
'exec'應該將它的參數按原樣傳遞給被調用的命令(即不需要進行連接和重新分割)。你是否通過'eval'執行'exec'? – Leon