终端中执行命令后如何自动输入q按键?
问题原因
你原先的命令不生效有两个核心原因:
echo -e "\q"的写法本身错误,\q不是shell的标准转义字符,最终输出的是字面量\q而非你需要的q按键输入- AWS CLI默认调用
less作为分页器时,会直接从伪终端读取输入,不会接收管道传入的stdin内容,因此你通过管道送的输入不会被分页器识别
可行解决方案
方案1:单次命令禁用分页器(最推荐)
直接给aws命令加--no-cli-pager参数,从根源上避免弹出需要按q退出的分页器:
aws s3api delete-bucket --bucket $bucket_name --no-cli-pager
方案2:全局禁用AWS CLI分页器
如果所有aws命令都不想触发分页器,可以直接修改配置永久生效:
aws configure set cli_pager ''
配置完成后再执行原本的delete-bucket命令即可,无需额外加参数。
方案3:使用expect实现自动输入q
如果你确实需要保留分页器配置,只针对这条命令自动输入q,可以用专门处理交互式命令的expect工具实现:
- 先安装expect:
- Debian/Ubuntu系列:
sudo apt install -y expect - CentOS/RHEL系列:
sudo yum install -y expect
- Debian/Ubuntu系列:
- 执行命令自动输入q:
expect -c 'spawn aws s3api delete-bucket --bucket '"$bucket_name"'; expect eof {send "q\r"}'
你也可以尝试用yes q | aws s3api delete-bucket --bucket $bucket_name的写法,但该方案兼容性较差,部分环境下仍会不生效,优先选择前两种方案即可。
内容的提问来源于stack exchange,提问作者cosmos-1905-14
相关产品推荐
相关产品推荐

