首页 > 解决方案 > 管道输入到脚本无法正常工作

问题描述

这是我的 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

标签: bash

解决方案


与其尝试使用静态文件与交互式程序“交谈”,不如考虑让 'cp' 知道使用命令行选项覆盖哪个文件:

  • cp -f/--force,强制覆盖现有文件。
  • cp -n/--no-clobber 不修改现有文件。

请记住,如果文件不存在,cp不会提示覆盖,这会导致问题和答案不匹配。


推荐阅读