抱歉,这听起来有点菜鸟,我不得不选择 Ubuntu 来工作,但我还不是很精通输入和输出的复杂性。基本上,我有一堆目录,每个目录都有相同脚本的副本,通常我必须进入每个目录,分别 ./ 每个脚本,等待两分钟,然后输入“2”以在脚本中途选择一个选项,然后退出并转到下一个文件夹。和我一起工作的一个人说我可以使用 cat 命令和管道自动输入我想放入脚本的内容,而不是坐着等待提示,但他没有告诉我如何做。因为我有十个,所以我想我应该基本上做以下事情:
for i in $(ls -d [each of the folders]);
do
cd $i;
echo “2” > input.txt;
cat input.txt | ./scriptname.sh;
rm input.txt;
cd ..;
done
所以我的问题是 1. 这会/应该有效吗?2. 有没有更简便的方法来实现这一点?
答案1
一些说明:
不要解析
ls
.假设你想使用全部当前文件夹中的目录,因此for dir in */ # note the trailing slash
在我看来,“dir”是比“i”更好的变量名。
如果不是想要每个目录,你可以把它们拼出来
for dir in dir1 dir2 dir4 ...; do ...
或者使用与所需目录匹配的 glob 模式
for dir in dir[1-46-9] ...; do ...
或者使用数组来保存它们,然后对数组进行迭代
dirs=(dirA dirB dirE dirG) for dir in "${dirs[@]}"; do ... # those quotes are required.
- 这种模式很好: 。您还可以创建一个子 shell,这样当子 shell 退出时
cd dir; do stuff ...; cd ..
的影响就会消失。cd
- 失败是有可能的
cd
。
那么,这里有一个稍微不同的看法
for dir in */; do
( cd "$dir" && echo 2 | ./scriptname.sh )
done