我将以下内容定义为只读:
readonly root_command='sudo -s'
后来在我的脚本中使用,如下所示:
exec $root_command
我的问题是,也许我很慢或者什么的,但我不完全理解POSIX 手册页,例如我是否可以单引号或必须双引号以及类似的选项的用途-p
是什么?
谢谢。
我有主机,我可以在其中在单节点架构或分布式架构上设置应用程序。所以我有一个库存。
[STG]
node1
[LIVE]
app_node
db_node
gateway_node
因此具有默认值的变量是single
但可以在 CLI 上更改为distributed
我有一个角色定义
- hosts:
gather_facts: no
roles:
- {role: setup, tags: ['setup', 'orchestra']}
所以我希望主机线根据地图值是动态的
- hosts: 'if single then host == STG else LIVE'
我有主文件,可以启动不同的个人角色。
---
- hosts: all
gather_facts: False
roles:
- role: "{{ rnames }}"
...
当我运行个人角色时,它运行良好
ansible-playbook -i inv initiate.yml -e rnames=install_packages
但我更喜欢通过向rname
变量提供角色列表来运行多个角色
ansible-playbook -i inv initiate.yml -e rnames=install_packages,config_merge
我尝试了with_items
&loop
构造,但似乎无法弄清楚。
我在一堆帐户上运行 offlineimap,并希望检查每次运行的退出代码并相应地执行一些操作。
我有 6 个独立的电子邮件帐户,我使用大量重复代码运行这些帐户。原来的命令结构是:
$ $(which offlineimap) -c offlineimaprc -o -a yahoo & declare yahoo_pid=$!
wait $yahoo_pid
yahoo_st=$?
if [[ $yahoo_st -ne 0 ]];then <do some stuff>
$ $(which offlineimap) -c offlineimaprc -o -a gmail & declare gmail_pid=$!
wait $gmail_pid
gmail_st=$?
if [[ $gmail_st -ne 0 ]];then <do some stuff>
现在我想删除重复项并从for in
循环和wait
命令中运行它。${account-name}_pid(例如 yahoo_pid)替换工作正常,但我被命令卡住了wait
。
$ for app in yahoo gmail
do
$(which offlineimap) -c offlineimaprc -o -a ${app} & declare ${app/%/_pid}=$!
wait ${app}_pid
done
[1] 73443
-bash: wait: `$yahoo_pid': not a pid or valid job spec
[2] 73444
-bash: wait: `$gmail_pid': not a pid or valid job spec
当我编写一个名为 array_call_self.sh 的脚本时,如下所示
#!/bin/bash
declare -A num word
word=(
[a]='index_a'
[b]='index_b'
[c]='index_c'
)
num=(
[a]=1
[b]=2
[c]=3
)
array=${$1[@]}
for i in ${$array[@]};do
echo $i
done
当我运行bash array_call_self.sh word
它时返回我
test.sh: line 13: ${$1[@]}: bad substitution
test.sh: line 14: ${$array[@]}: bad substitution
我在下面有一个 bash 脚本,旨在从文件中对域列表进行 curl 并输出结果。
#!/bin/bash
baseurl=https://csp.infoblox.com
domains=/home/user/Documents/domainlist
B1Dossier=/tide/api/data/threats/state/host?host=$domains
APIKey=<REDACTED>
AUTH="Authorization: Token $APIKey"
for domain in $domains; do curl -H "$AUTH" -X GET ${baseurl}${B1Dossier} > /tmp/outputfile; done
不幸的是,脚本并没有遍历文件中的每个域。
为了帮助理解,我列出了脚本的期望/解释:
/home/user/Documents/domainlist
,我有几个域。$domains
在末尾附加变量B1Dossier
为了增加可见性,我在下面包含了用于单个域的工作 curl 命令:
curl -H 'Authorization: Token <REDACTED>' -X GET https://csp.infoblox.com/tide/api/data/threats/state/host?host=<place domain here>
有人可以帮助我做错什么以及如何解决这个问题吗?
我有以下关联数组。
var1="dog"
var2="cat"
var3="moose"
declare -A asar01=(
["one"]="$var1"
["two"]="$var2"
["three"]="$var3"
)
我想循环并打印每个值变量名称。所以只有“var1”、“var2”和“var3”会打印。我怎样才能做到这一点?我尝试了以下方法,但它打印了实际的脚本名称。作为第一个变量输出。
for i in "${!asar01[@]}";do
echo "${!asar01[$i]}"
done
我的示例是尝试使用该${!variable}
方法打印名称,但它不起作用。我怎样才能做到这一点?