请勿将该命令放在双引号中。
_T_COMMAND_=1 valgrind ---tool=memcheck --trace-children=yes command
一般语法简单地
[var=value ...] cmd [args]
这将设置为value
环境变量var
为cmd
的持续时间。您可以通过这种方式设置多个变量。
或者,设置变量和export
它;那么它将在当前shell的剩余时间内保持设置,并且暴露给子进程(这就是export
所做的)。
_T_COMMAND_=1
export _T_COMMAND_
valgrind ---tool=memcheck --trace-children=yes command
同样,valgrind
处理其选项,然后运行指定command
(带任何选项)作为子进程。
双引号中的单个命令是无害的,因为shell在内核看到参数之前会剥去引号。包含双引号空格的字符串将保留为单个参数,而不带引号时,它将成为多个参数。看哪:
bash$ perl -le 'print "<<$_>>" for @ARGV' "foo bar" baz quux
<<foo bar>>
<<baz>>
<<quux>>
或者一样好,加上周围的一切无害的,但毫无疑问相当混乱双引号这是不是已经引述:
bash$ "perl" "-le" 'print "<<$_>>" for @ARGV' "yowza"
<<yowza>>
壳解析成
<<perl>>
<<-le>>
<<print "<<$_>>" for @ARGV>>
<<yowza>>
这
并删除进程中的(外部)引号。
要执行命令,您需要执行'var = $(command)'。因此,你需要'_T_COMMAND _ = $(valgrind --- tool = memcheck -trace-children = yes命令)' – fedorqui
,但它正在使用_T_COMMAND_ = 1“命令”。我已修改为_T_COMMAND_ = 1“valgrind ---工具= memcheck -trace-children = yes命令” – Sach
调整脚本更改...修正了cpp代码更改的问题,并将valgrind添加到特定的子进程中! – Sach