我有一個文件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