如果我在 bash 脚本(类似于这个)中运行以将内容发送到文件:
sudo ./bar.sh > foo
内容栏.sh:
echo 'for pid in $(ps -ef | grep "smbd" | awk '{print $2}'); do kill -9 $pid &> /dev/null; done'
富出:
for pid in $(ps -ef | grep "smbd" | awk {print }); do kill -9 $pid &> /dev/null; done
$2
迷失了。
预期输出:
for pid in $(ps -ef | grep "smbd" | awk '{print $2}'); do kill -9 $pid &> /dev/null; done
我如何得到它?
首先,除非
sudo
确实需要使用sudo
. 我真的不能足够强调这一点。除非您收到“权限被拒绝”错误,否则您不需要也不sudo
应该使用sudo
. 所以你不需要sudo ./bar.sh
,只需运行./bar.sh
。接下来,您不需要
echo
获取命令的结果。这不是必需的:您只需要运行命令本身。您不需要命令替换 (
$(command)
) 或回显。只要在你的脚本中有这个:请注意,如果您想获取正在运行的进程的 PID,您也不需要
ps
。您可以只使用pgrep smbd
which 避免grep
过程本身出现在结果中的问题。最后,如果要打印多行字符串作为输出,可以使用here doc代替许多 echo 语句。所以,把所有这些放在一起,你应该
bar.sh
像这样:然后将其运行为
./bar.sh > foo
(不sudo
!)。或者,这是相同方法的更简单版本:
或者,更简单:
这将我们带到最后一点,你确定你真的想要一个脚本吗?要杀死所有正在运行的
smbd
进程,您只需要一个命令: