#!/bin/bash
# 1st part
ret=$(ps aux | grep -v grep) # thats OK
echo $ret
# 2nd part
cmd="ps aux | grep -v grep" # a problem with the pipe |
ret=$($cmd)
echo $ret
如何在第二部分中使用命令字符串?认为管道是问题。试图逃避它,但它没有帮助。得到ps的一些snytax错误。
谢谢!
答案 0 :(得分:5)
此处不建议使用eval
。它可能会导致意外结果,尤其是可以从不受信任的来源读取变量时(请参阅BashFAQ/048 - Eval command and security issues。
您可以通过定义和调用下面的函数来以简单的方式解决此问题
ps_cmd() {
ps aux | grep -v grep
}
并在脚本中将其用作
output="$(ps_cmd)"
echo "$output"
另外一个好的解释是看看为什么在变量中存储命令不是一个好主意并且有很多潜在的陷阱 - BashFAQ/050 - I'm trying to put a command in a variable, but the complex cases always fail!
答案 1 :(得分:3)
您需要eval
:
ret=$(eval "$cmd")