如果我尝试连续在十个不同的目录中运行相同的脚本,这种方式是否可行,是否有更简洁的命令序列?

如果我尝试连续在十个不同的目录中运行相同的脚本,这种方式是否可行,是否有更简洁的命令序列?

抱歉,这听起来有点菜鸟,我不得不选择 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

一些说明:

  1. 不要解析ls.假设你想使用全部当前文件夹中的目录,因此

    for dir in */        # note the trailing slash
    

    在我看来,“dir”是比“i”更好的变量名。

  2. 如果不是想要每个目录,你可以把它们拼出来

    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.
    
  3. 引用你的变量

  4. 这种模式很好: 。您还可以创建一个子 shell,这样当子 shell 退出时cd dir; do stuff ...; cd ..的影响就会消失。cd
  5. 失败是有可能的cd

那么,这里有一个稍微不同的看法

for dir in */; do
    ( cd "$dir" && echo 2 | ./scriptname.sh )
done

相关内容