Bash历史命令,存储整个术语忽略任何选项

时间:2016-03-24 12:22:41

标签: bash shell

我有一个脚本,它反复等待用户输入的文本,然后使用输入的文本调用另一个脚本。 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[@]}这样的初始空字符串来解决,但每个历史条目都以空格为前缀,每次重复使用时都会添加一个空格。所以这是一个相当不优雅的解决方案。

感谢。

1 个答案:

答案 0 :(得分:1)

我在SE Unix & Linux的问题中找到了答案。

通过在--命令中使用双短划线(history),您可以停止Bash内置命令处理后面的选项。所以我需要改变的是:

history -s -- ${search_term[@]}