交互式 bash 脚本接收用户输入

Interactive bash script receiving user inputs

请原谅我的外行

我写了一个简单的一行代码来从一个巨大的文本文件中提取我想要的内容:

cat file | grep "value" | cut -f1 -d":"

它从那里输出文件路径行。

我希望它继续这样做:

  1. cd 一次一行进入路径。
  2. 每次在 cd 运行 这个命令之后: ls | grep .fileformat
  3. 然后让我选择 运行 3 个命令,如果我按 [return] 没有任何值,它将忽略并监听下一个命令。三个完成后继续。
  4. cd 进入下一行的目录并重复直到最后一行。

抱歉,我无法理解后面的部分,因为我什至不知道从哪里开始谷歌搜索。

谢谢观看!

编辑 1:我的初始命令的输出给出了这样的路径:

/home/user/path/to/file

所以没有~,应该能cd进去没问题吧?

以下是帮助您提出更好问题的答案框架:

sed -n '/value/s/\([^:]*\):.*//p' file | while read d
do
  (
     cd d
     ls | grep .fileformat
     read -p  "3 commands? " c
     [ -z "$c" ] && continue
     cd d
     eval "$c"
  )
done

(交互式阅读的通常注意事项 + 使用 eval 是危险的)

Allan Wind 的答案稍作修改,实现了我认为 OP 想要的(试图作为对 Allan 的评论进行回复,但无法正确确定代码格式):

sed -n '/value/s/\([^:]*\):.*//p' file | while read d
do
  echo -e "Entering $d"
  cd $d
  ls | grep .fileformat
  for i in {1..3}; do
    echo -e "Type your command #${i}:\n"
    read -p '>' input < /dev/tty
    [ -z "$input" ] && echo -e "\nDoing nothing this time...\n" && continue
    eval "$input"
  done
done

(交互式阅读的常见警告 + 使用 eval 是危险的)