我有一个文件list.txt
它包含文件的列表中打开一个文件:使用bash选择命令从文件列表
file-1.txt
file-2.txt
...
file-n.txt
我想用猛砸select
命令生成菜单,所以我可以打开我选择的文件。
我试过,但它不工作:
select d in list.txt;
do test -n "$d" && break;
echo ">>> Invalid Selection";
done
open "$d"
我有一个文件list.txt
它包含文件的列表中打开一个文件:使用bash选择命令从文件列表
file-1.txt
file-2.txt
...
file-n.txt
我想用猛砸select
命令生成菜单,所以我可以打开我选择的文件。
我试过,但它不工作:
select d in list.txt;
do test -n "$d" && break;
echo ">>> Invalid Selection";
done
open "$d"
下面是结束了工作,所有功劳@ eush77和@ilkkachu。
我添加了一个额外的部分:文件列表是由搜索程序(ripgrep)生成的。代码似乎处理文件名中的空格。
#!/opt/local/bin/bash
list=$(rg --files |grep -i [email protected])
IFS=$'\n'
select file in $list
do test -n "$file" && break;
exit;
done
open "$file"
选择名[中字]。做清单;完成
扩展后面的单词列表,生成项目列表。扩展单词集打印在标准错误 上,每个前面都有一个数字。 [...]
在您的示例中,单词列表可扩展为单个单词list.txt
(而不是您想要的此文件中的行列表)。您需要使用命令替换为:
select d in $(<list.txt); # Change this line
do test -n "$d" && break;
echo ">>> Invalid Selection";
done
open "$d"
$ help select
select: select NAME [in WORDS ... ;] do COMMANDS; done
...
选择需要的单词列表,就像for
,而不是一个文件名。
您需要使用类似select d in $(cat list.txt)
的内容来读取文件中的选项。但要小心字词拆分和文件名拼接的常见问题,即如果列表中的名称可以包含空格,则设置IFS=$'\n'
,如果它们可以包含浮点字符,则使用set -f
。
不知道你想要什么。请[mcve]。明确问题的明确问题有更多机会提供更好的答案。 – jm666