将“pidof”与“sh -c”一起使用

将“pidof”与“sh -c”一起使用

我想知道为什么这个命令行不打印pidof sh

$ sh -c "var=`pidof sh` ; echo \$var; ps -H"

123按预期打印

$ sh -c "var=123 ; echo \$var; ps -H"

我使用的是 Ubuntu Linux。

答案1

你错过了引号。一种方法是:

sh -c "var=\"`pidof sh`\" ; echo \$var; ps -H"

其他:

sh -c "var=\"\`pidof sh\`\" ; echo \$var; ps -H"

pidof sh请注意,它们在执行时有所不同!在第一个版本中,反引号 ( ) 内的表达式pidof sh由当前 shell 执行 - 即 sh -c正在运行。在第二个中,它是sh -c执行的命令pidof。更重要的是,它pidof是在一个子 shell 中执行的,该子 shell 计算反引号内的表达式 - 因此您会在var变量中列出一个额外的 pid。 (更简单地说:反引号调用另一个 shell然后由 pidof 列出。)

对于两者来说,更好的方法是使用$( ... )or \$( ... )

相关内容