2017-05-25 21 views
1

我有一個spec.txt,如下所示,可以運行「cat spec .txt | cut -d「|」-f 2「在linux shell中。是執行linux命令的任何方式,如下所示:「exec cat spec.txt | cut -d」|「-f 2」in tclsh

[email protected]:~/auto/acpi6/main/spec$ cat spec.txt 
a1 | BMC_HEALTH  | 0x0  | discrete | 0x0000| na  | na  | na  | na  | na  | na 

[email protected]:~/auto/acpi6/main/spec$ cat spec.txt | cut -d "|" -f 2 
BMC_HEALTH 

- >爲什麼它不能運行的

"exec cat spec.txt | cut -d "|" -f 2" in tclsh 
% exec cat spec.txt | cut -d "|" -f 2 
couldn't execute "-f": no such file or directory 
+0

可能是「around |?」有問題試過了嗎?(如\「| \」) –

+1

您是否考慮過在Tcl中編寫解析代碼而不是開始一個新程序?管道字符對於Tcl exec命令並且不能被轉義 –

+0

這是'exec'中經典的棘手案例之一,沒有好的方法來引用它,*我們知道這是一個問題*。沒有好的方法來修復它,更常見的用例更糟糕,所以我們一直在擔心它,而不是修復它。 –

回答

1

命令的問題是,Tcl的標準解釋規則轉換,所列|一個不帶引號的裸一個exec看到它之前。它是Tcl常規語法規則(否則非常好)咬人的地方之一。

最簡單的解決方法是使用sh作爲中介。

exec cat spec.txt | sh -c {exec cut -d "|" -f 2} 

大括號中的部分是shell語法,而不是Tcl,所以可以處理這種情況。