提问人:nextmick 提问时间:9/9/2023 更新时间:9/9/2023 访问量:33
为什么 bash 快捷方式不接受我的 ansible-playbook --limit 通配符 *?
Why does bash shortcut not accept my ansible-playbook --limit wildcard *?
问:
我正在尝试通过 bash 快捷方式运行 ansible-playbook,但出现错误。当我从长长的目录(如下)运行此命令时,剧本和带有通配符 * 的限制工作正常;该剧本在所有以 BBCC 名称开头的主机上运行,即 BBCC01、BBCC02 等。
[作品]
sparkles@Yo:~/myrepos/pre-post-role$ ansible-playbook run_pre_check.yml --limit 'BBCC*'
我的 .bashrc 文件中有这个 bash 脚本......
#precheck shortcut
#to run, type "pre <whatever your limits will be>"
pre (){
cd ~/myrepos/pre-post-role
ansible-playbook run_pre_check.yml --limit $1
cd
}
通常,如果我在特定限制下执行此命令,它就可以正常工作。以下是工作示例:
[作品] 或pre BBCC01
pre BBCC01:BBCC02:BBCC03
但是,使用 ansible 定义的 * 通配符会给我一个错误。
[不起作用]pre BBCC*
错误如下:ansible-playbook:错误:无法识别的参数:BBCC01.zip BBCC_.zippre BBCC*
为什么这不起作用?为什么它要寻找那个 zip 文件?是我的 bash 快捷方式中我做错了什么吗?我读到它与 bash 插值有关,但我对 bash 不够聪明,不知道发生了什么。请教育我。先谢谢你。
答:
3赞
Barmar
9/9/2023
#1
您需要引用参数以防止 shell 扩展通配符,就像手动运行命令时一样。而且你必须在函数中引用,以防止它在那里也被扩展。$1
pre (){
cd ~/myrepos/pre-post-role
ansible-playbook run_pre_check.yml --limit "$1"
cd
}
pre 'BBCC*'
评论
0赞
nextmick
9/10/2023
这是狂欢中缺少的引号!感谢您的帮助!这修好了!此外,对于新添加的引号,我实际上不需要命令中的引号。只是普通的 pre BBCC* 效果很好。再次感谢你!!=D
1赞
Barmar
9/10/2023
如果当前目录中有任何文件,这将不起作用。shell 将在调用函数之前展开通配符。BBCC*
评论