我想要做的就是在文件目录中搜索字符串的任何部分。以下是处理此问题的代码部分:
(input is set through user input)
input2=$(eval find . -name "$input" -print | sed -n 1p) #Using find to search for the file I need to read
... (Checking the file I 'found' actually exists)
out=$(eval $(shuf -n 1 "$input2")) #Shuffle it randomly
echo "$out" #Echo the output
如果我的文件“日期”包含内容date "+%A %d %B %Y"
,我可以输入“日期”并获得预期结果,但“日期”会失败
find: paths must precede expression: is
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
解决此问题的最简单方法是什么?
我没有多尝试,因为我不知所措。我在搜索字符串中尝试过通配符,但它们根本不起作用。以下是源代码的整个输入到输出部分:
while true; do
echo -n ">"
read input
input=${input,,}
echo "[DEBUG]: Recieved $input"
echo "[IO]: Accessing database"
input2=$(eval find . -name "$input" -print | sed -n 1p) || out="WARNING: Input/Output Error{TYPE=IO.GENERAL, VALUE=$input2}"
echo "[INPUT2]: Recieved $input2"
if [ ! -f "$input2" ]
then
input2="./db/unknowncommand"
fi
#out=$(<"db/$input") || out="WARNING: Input/Output ERROR" #Old 'just print whatever is in the file approach
out=$(eval $(shuf -n 1 "$input2")) || out="WARNING: Input/Output ERROR{TYPE=IO.GENERAL, VALUE=$input}" #Random output
echo "$out"
./JAISpeak "$out" #A small text-to-speech program I made
done
答案 0 :(得分:0)
对于“在文件名中查找字符串的任何部分”部分,我会这样做:
input2=$(for partname in ${input}; do find . -name "${partname}" -print ; done)
这将匹配它可以发生的每一次事件...... 如果你只需要第一次出现(很奇怪,但是嘿,它与$ PATH有点相同):
input2=$(for partname in ${input}; do find . -name "${partname}" -print ; done | head -1)
请注意,我故意使用${input}
而不是"${input}"
:我想将$ {input}中的每个单词分开并逐个循环遍历每个单词。
我让你修改程序的其余部分^^(我需要去......)