請勿將該命令放在雙引號中。
_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