comando="ps -o pid,pcpu,cmd -C \"$2\""
$ 2必须是这种forms的variables: command1或command1 command2 command3 ... commandn
我怎样才能检查这个variables,以避免错误? 我需要一个控制(与if)来检查模式。
编辑: ps可以这样调用:
ps -o pid,pcpu,cmd -C "command1 command2 ... commandn" 。 如果有人以script.sh -C " command1 command2"调用这个bash脚本,ps命令返回“IMPROPER LIST”。 我想在启动ps命令之前避免ps错误并回显我的错误。
你应该避免把命令放在variables中 。
如果空间是让你绊倒的东西,你可以像这样去除它们:
ps -o pid,pcpu,cmd -C ${2// }
这将删除所有的空间,所以如果你的任何命令string包含空格将会毁了他们。 这将删除逗号两边的前后空格和空格:
commands=${2/# } # leading space commands=${command/% } # trailing space commands=${command/, /,} # spaces after commas commands=${command/ ,/,} # spaces before commas ps -o pid,pcpu,cmd -C "$commands"
如果您想要返回一个错误而不是清理和运行input,只需执行空间移除或其他清理,并检查结果是否与input相同。 如果他们不是,那么输出一个错误。
它可以使用for循环
arguments="command1 command2 command3 command4 command5" for arg in $arguments do ps -o pid,pcpu,cmd -C $arg done
结果:
ps -o pid,pcpu,cmd -C command1 ps -o pid,pcpu,cmd -C command2 ps -o pid,pcpu,cmd -C command3 ps -o pid,pcpu,cmd -C command4 ps -o pid,pcpu,cmd -C command5
也许你能给出一个更好的例子,说明它应该如何工作,你期望的是什么……它对我来说看起来并不太清楚。
要从命令行调用它,我在注释中解释的方式只是使用$*来捕获所有传递的参数。
for arg in $* do ps -o pid,pcpu,cmd -C $arg done
然后像这样调用它:
./test.sh command1 command2 command3 command4 command5 command6
它会运行每个参数的ps命令。