Bash脚本调用Docker报-r短标志错误,如何正确执行命令?
在Bash脚本中正确执行排序Docker容器名称的命令
直接将命令存入普通变量后执行时,Bash的分词机制会把read -r拆分成独立参数,导致Docker错误地将-r识别为自身的命令行选项,从而抛出unknown shorthand flag: 'r' in -r错误。以下是两种可行的解决方法:
方法1:用函数封装命令(推荐)
将命令逻辑封装为Bash函数,调用函数即可避免分词问题,同时更易维护和复用:
sorted_docker_names() { docker ps --format "table {{.Names}}" | (read -r; printf "%s\n" "$REPLY"; sort -k 1 ) } # 调用函数获取排序后的容器名 sorted_docker_names
方法2:用eval执行变量中的命令
如果必须用变量存储命令,可以借助eval来正确解析命令中的管道、子shell等语法:
docker_cmd='docker ps --format "table {{.Names}}" | (read -r; printf "%s\n" "$REPLY"; sort -k 1 )' # 使用eval执行命令 eval "$docker_cmd"
额外优化建议
如果不需要保留表头,可简化命令直接跳过表头处理步骤:
docker ps --format "{{.Names}}" | sort
内容的提问来源于stack exchange,提问作者sudo_su_me
相关产品推荐
相关产品推荐

