Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是执行linux命令的任何方式,如;exec cat spec.txt“切割-d”|&引用-f 2“;在tclsh_Tcl - Fatal编程技术网

是执行linux命令的任何方式,如;exec cat spec.txt“切割-d”|&引用-f 2“;在tclsh

是执行linux命令的任何方式,如;exec cat spec.txt“切割-d”|&引用-f 2“;在tclsh,tcl,Tcl,我有一个spec.txt,如下所示,可以在linux shell中运行“cat spec.txt | cut-d”|“-f2”命令 user@test-server:~/auto/acpi6/main/spec$ cat spec.txt a1 | BMC_HEALTH | 0x0 | discrete | 0x0000| na | na | na | na | na | na user@tes

我有一个spec.txt,如下所示,可以在linux shell中运行“cat spec.txt | cut-d”|“-f2”命令

user@test-server:~/auto/acpi6/main/spec$ cat spec.txt
a1 | BMC_HEALTH       | 0x0        | discrete   | 0x0000| na        | na        | na        | na        | na        | na

user@test-server:~/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

问题在于,Tcl标准解释器规则在
exec
看到它之前,将带引号的
|
转换为未带引号的裸解释器。这是Tcl的常规语法规则(否则这是一件非常好的事情)发挥作用的地方之一

最简单的解决方法是使用
sh
作为中介

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

大括号中的部分是shell语法,而不是Tcl,因此可以处理这种情况

也许是“周围”的问题?你试过逃离它们吗?(比如“\”\)您是否考虑过在Tcl中编写解析而不是启动新程序?管道字符是Tcl的exec命令所特有的,不能转义。这是
exec
中典型的棘手案例之一。没有好的方法引用它,我们知道这是一个问题。如果不创建其他更常见的用例,就无法很好地修复它更糟糕的是,我们一直在担心它,而没有解决它。