繁体   English   中英

Bash 脚本在多个输入上一一执行单个命令

[英]Bash script to execute a single command over multiple inputs one by one

我有一个基于 linux 的命令,名为x2goterminate-session ,后跟用户名,例如

x2goterminate-session john

但是我想在单个 go 中终止许多用户会话。

slpusrs=`x2golistsessions_root | grep '|S|' | cut -d "|" -f 2`

上面的变量slpusrs找到睡眠用户的列表并将它们存储在 slpusrs 变量中。

现在我想在用户列表上一个一个地执行 x2goterminate-session 命令,这样所有休眠的用户都在一个 go 中终止,而不是一个一个地键入命令后面的用户。

command=x2goterminate-session
for i in "${slpusrs[@]}"; do
"$command" "$i"
done

但它不起作用。 请帮忙

slpusrs是一个字符串,而不是一个数组。 利用

for i in $slpusrs; do
    "$command" $i"
done

不要使用 Bash 进行迭代,而是使用xargs为每个用户运行您的命令。

x2golistsessions_root |
  grep '|S|' |
    cut -d "|" -f 2 |
      xargs -n1 x2goterminate-session

如果x2goterminate-session realls 一次只能在一个用户上工作,你可以做一个

for user in $(x2golistsessions_root | grep '|S|' | cut -d "|" -f 2)
do
  echo "Murdering unser $user ..."
  x2goterminate-session "$user"
done

无需引入单独的变量,除非您稍后再次需要用户列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM