bash - 管道输入到脚本无法正常工作
问题描述
这是我的 shell 脚本(automate_test.sh):
#!/bin/bash
cp -i ball1.rtf container
cp -i ball2.rtf container
cp -i ball3.rtf container
这是此脚本的输入文件 (in_test.txt):
n
y
n
而且,我正在执行这个命令:
cat "in_test.txt" | ./automate_test.sh
名为“container”的文件夹已经包含名为“ball1.rtf”、“ball2.rtf”和“ball3.rtf”的文件 预期的行为是只有ball2 应该被覆盖。但输出如下:
overwrite container/ball1.rtf? (y/n [n]) not overwritten
overwrite container/ball2.rtf? (y/n [n]) not overwritten
overwrite container/ball3.rtf? (y/n [n]) not overwritten
解决方案
与其尝试使用静态文件与交互式程序“交谈”,不如考虑让 'cp' 知道使用命令行选项覆盖哪个文件:
- cp -f/--force,强制覆盖现有文件。
- cp -n/--no-clobber 不修改现有文件。
请记住,如果文件不存在,cp不会提示覆盖,这会导致问题和答案不匹配。
推荐阅读
- xcode - NSTooltip 自动释放崩溃
- python - 如何在 ubuntu 20.04 上安装 python3-pip
- php - WP / 阿贾克斯 | Jquery Dropzone js文件上传调用两次请求
- javascript - 通过发送 javascript 数据数组作为参数来加载部分视图
- python - 如何在python中忽略UserWarning
- c# - AWS Aurora PostgreSQL 集群顶部的 Entity Framework Core,带有一个写入/读取节点和一个只读节点
- python - 对用户输入的整数列表应用 max() 函数不会返回最大值吗?
- java - 在 Java 中创建服务器端计时器的最佳方法是什么?
- apache-spark - 如何将 pyspark 数据框列拆分为仅两列(下面的示例)?
- jquery - jQuery 需要一个带有 vue native 文档的窗口