我有一个脚本,它反复等待用户输入的文本,然后使用输入的文本调用另一个脚本。 SO code credit, 'version 1'.
while IFS="" read -r -e -p 'Enter search term: ' -a search_term; do
if [ "$search_term" != "" ]; then
/path/to/script ${search_term[@]}
else
echo "Bye."
exit 0
fi
history -s ${search_term[@]}
done
它调用Bash内置history
命令以允许滚动到以前的条目。
问题是当search_term
以选项开头时,例如-x exclude_this search term
。这会导致以下错误:history: -x: invalid option
。如何强制history
命令将整个search_term
添加为历史记录条目,而不是处理search_term
可能开头的任何选项?即整个-x exclude_this search term
应作为历史记录条目添加。
注意:这实际上可以通过添加一个像history -s "" ${search_term[@]}
这样的初始空字符串来解决,但每个历史条目都以空格为前缀,每次重复使用时都会添加一个空格。所以这是一个相当不优雅的解决方案。
感谢。
答案 0 :(得分:1)
我在SE Unix & Linux的问题中找到了答案。
通过在--
命令中使用双短划线(history
),您可以停止Bash内置命令处理后面的选项。所以我需要改变的是:
history -s -- ${search_term[@]}