linux - 如何从 TCL shell 执行 Linux 命令?

标签 linux tcl

我正在从 linux env 成功执行以下命令,

[UdayaShankar Das@lxapp-3]# tshark -r sim_venom_sanity_DEVICE1_PORT1_1_capture.pcap -Vx -R frame.number==2 | sed -n 's/^[0-9a-f]*\s\(\(\s[0-9a-f][0-9a-f]\)\{1,16\}\).*$/\1/p'

ff ff ff ff ff 00 10 94 00 00 0a 08 06 00 01 08 00 06 04 00 01 00 10 94 00 00 0a c0 01 01 02 00 00 00 00 00 00 c0 01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

当尝试从 tcl shell 通过 exec 命令并返回 tik operator 时,上述命令失败。请指教。

% [ exec tshark -r /home/arts2/STC_CAPTURE/sim_venom_sanity_DEVICE1_PORT1_1_capture.pcap  -Vx -R frame.number==2 | sed -n 's/^[0-9a-f]*s((s[0-9a-f][0-9a-f]){1,16}).*^A/p' ]
 invalid command name "0-9a-f"

更新:

感谢您的建议。我试过了,但似乎不起作用:(

  % set cmd34 {tshark -r /home/arts2/STC_CAPTURE/sim_venom_sanity_DEVICE1_PORT1_1_capture.pcap -Vx -R frame.number==2 | sed -n 's/^[0-9a-f]*s((s[0-9a-f][0-9a-f]){1,16}).*^A/p'}
 tshark -r /home/arts2/STC_CAPTURE/sim_venom_sanity_DEVICE1_PORT1_1_capture.pcap -Vx -R frame.number==2 | sed -n 's/^[0-9a-f]*s((s[0-9a-f][0-9a-f]){1,16}).*^A/p'
 % [ eval exec $cmd34]
 invalid command name "0-9a-f"

也尝试了第二个选项

%set cmd34 {tshark -r /home/arts2/STC_CAPTURE/sim_venom_sanity_DEVICE1_PORT1_1_capture.pcap -Vx -R frame.number==2 | sed -n 's/^[0-9a-f]*s((s[0-9a-f][0-9a-f]){1,16}).*^A/p'}
 tshark -r /home/arts2/STC_CAPTURE/sim_venom_sanity_DEVICE1_PORT1_1_capture.pcap -Vx -R frame.number==2 | sed -n 's/^[0-9a-f]*s((s[0-9a-f][0-9a-f]){1,16}).*^A/p'
 % [ exec {*}$cmd34 ]
 extra characters after close-brace

最佳答案

当你有这样一段 shell 脚本时:

tshark -r /home/arts2/STC_CAPTURE/sim_venom_sanity_DEVICE1_PORT1_1_capture.pcap  -Vx -R frame.number==2 | sed -n 's/^[0-9a-f]*s((s[0-9a-f][0-9a-f]){1,16}).*^A/p'

运行它的最简单方法是使用:

set shellscript {tshark -r /home/arts2/STC_CAPTURE/sim_venom_sanity_DEVICE1_PORT1_1_capture.pcap  -Vx -R frame.number==2 | sed -n 's/^[0-9a-f]*s((s[0-9a-f][0-9a-f]){1,16}).*^A/p'}
set response [exec /bin/sh -c $shellscript]

或者,将单引号字符更改为大括号:

exec tshark -r /home/arts2/STC_CAPTURE/sim_venom_sanity_DEVICE1_PORT1_1_capture.pcap  -Vx -R frame.number==2 | sed -n {s/^[0-9a-f]*s((s[0-9a-f][0-9a-f]){1,16}).*^A/p}

关于linux - 如何从 TCL shell 执行 Linux 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26467387/

相关文章:

linux - 如何在 gdb 中搜索进程的所有内存?

curl - 错误:curl:/usr/local/lib/libcurl.so.4:没有可用的版本信息(curl要求)

string - TCL 字符串前置

linux - .htaccess - 将子目录添加到所有目录

c - memcpy() 函数的段错误

c - 读取字符串,char[] 直到行 C 的末尾

java - 为什么从 TCL WS 客户端调用 java webservice 时返回额外的 header 信息

debugging - Tcl 程序,其行为根据 "puts"语句而变化

linux - 在 tcl exec 中传递变量参数的正确方法是什么?

linux - UNIX 排序 : Sorting something from the clipboard