Linux 命令可以从命令行工作,但不能从shell脚本工作
我不太熟悉shell脚本。我想修改一个脚本,但在我更改脚本后,它会给我错误“没有这样的文件或目录” 但该命令在命令提示符下工作 这是导致问题的线路。(甚至不知道下面的命令如何生成进程。) 若我运行命令作为Linux 命令可以从命令行工作,但不能从shell脚本工作,linux,shell,Linux,Shell,我不太熟悉shell脚本。我想修改一个脚本,但在我更改脚本后,它会给我错误“没有这样的文件或目录” 但该命令在命令提示符下工作 这是导致问题的线路。(甚至不知道下面的命令如何生成进程。) 若我运行命令作为 $valgrind ---tool=memcheck --trace-children=yes command 有什么想法吗 不要将命令放在双引号中 _T_COMMAND_=1 valgrind ---tool=memcheck --trace-children=yes command 一
$valgrind ---tool=memcheck --trace-children=yes command
有什么想法吗 不要将命令放在双引号中
_T_COMMAND_=1 valgrind ---tool=memcheck --trace-children=yes command
一般语法很简单
[var=value ...] cmd [args]
这将在cmd
期间将环境变量var
设置为value
。您可以用这种方式设置多个变量
或者,设置变量并导出它;然后,它将在当前shell生命周期的剩余时间内保持设置,并暴露于子进程(这就是导出的作用)
类似地,valgrind
处理其选项,然后作为子流程运行指定的命令(带有任何选项)
双引号中的单个命令是无害的,因为shell将在内核看到参数之前去掉引号。双引号中带有空格的字符串将作为单个参数保留,而如果没有引号,它将成为多个参数。瞧:
bash$ perl -le 'print "<<$_>>" for @ARGV' "foo bar" baz quux
<<foo bar>>
<<baz>>
<<quux>>
bash$perl-le“print”表示@ARGV的“foo-bar”baz-qux
或者,也可以在所有未引用的内容周围添加无害但无疑相当混乱的双引号:
bash$ "perl" "-le" 'print "<<$_>>" for @ARGV' "yowza"
<<yowza>>
bash$“perl”-le“print”代表@ARGV的“yowza”
shell将其解析为
<<perl>>
<<-le>>
<<print "<<$_>>" for @ARGV>>
<<yowza>>
>
并删除过程中的(外部)引号。要执行命令,需要执行var=$(command)
。因此,您需要类似于\u T\u COMMAND.=$(valgrind--tool=memcheck--trace children=yes COMMAND)
的东西,但它使用的是\u T\u COMMAND\u=1“COMMAND”。我已经修改为_T_COMMAND_=1“valgrind--tool=memcheck--trace children=yes COMMAND”放弃了脚本更改。。。通过将valgrind添加到特定子进程,解决cpp代码更改的问题!!!
bash$ "perl" "-le" 'print "<<$_>>" for @ARGV' "yowza"
<<yowza>>
<<perl>>
<<-le>>
<<print "<<$_>>" for @ARGV>>
<<yowza>>