【问题标题】:LINUX - saltstack cmd.run in a variableLINUX - saltstack cmd.run 在变量中
【发布时间】:2015-05-20 20:52:42
【问题描述】:

我知道我可以使用 sls 从 salt 运行命令,但我需要通过 bash 脚本运行某些命令。我需要将命令的结果存储到一个变量中。

在盐服务器的外壳上运行以下命令时,它可以工作,我得到一个结果

salt -t70 'server' cmd.run "cat /etc/shadow | grep user |cut -d: -f3"

但是当我将命令迁移到 salt 服务器中 bash 文件中的变量时,它不会。

BASH.SH

test = $(echo salt -t70 $server cmd.run "cat /etc/shadow | grep $user |cut -d\":\" -f3");
echo $test;

错误信息

[root@saltserver ~]# sh bash.sh
bash.sh: line 13: test: too many arguments

我错过了什么?我需要修复什么才能使其正常工作? 谢谢

【问题讨论】:

  • 你能显示你的 bash 脚本的全部内容吗?第 13 行是什么?
  • @mattias,不需要额外的上下文;这里有足够的东西来诊断这个问题。
  • 顺便说一句——shellcheck.net 会自动为你找到这个错误。

标签: linux bash shell salt-stack


【解决方案1】:

您不能在作业中在= 周围放置空格——这样做会使操作...好吧,不再是作业。也就是说:

使用

# assign result to a variable named test
test=$(echo salt -t70 $server cmd.run "cat /etc/shadow | grep $user |cut -d\":\" -f3");

不是

# run the command named test, with its first argument '=' and its second argument
# taken from the results of invoking saltstack.
test = $(echo salt -t70 $server cmd.run "cat /etc/shadow | grep $user |cut -d\":\" -f3");

【讨论】:

  • 我实际上必须删除回声并保留为 test=$(salt -t70 $server cmd.run "cat /etc/shadow | grep $user |cut -d\":\" - f3");但这样做时它起作用了。谢谢
  • 是的——我假设你故意在其中有echo 来测试变量捕获而不实际运行盐。
猜你喜欢
  • 2015-03-11
  • 2018-04-27
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
相关资源
最近更新 更多