2016-03-24 4 views
0

私は、ユーザーが入力したテキストを繰り返し待ってから、入力したテキストで別のスクリプトを呼び出します。 SO code credit, 'version 1'.Bashの履歴コマンドは、すべてのオプションを無視して単語を保存します。

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 optionhistoryコマンドで、search_termの全体を履歴エントリとして追加し、search_termで始まるオプションを処理しないようにするにはどうすればよいですか?すなわち、-x exclude_this search termの全体を履歴エントリとして追加する必要があります。

注:これは実際にはhistory -s "" ${search_term[@]}のような最初の空の文字列を追加することで解決できますが、各履歴エントリの先頭にスペースがあり、繰り返し使用するたびにエントリをさらに右に押します。だから、これはやや面白い解決策です。

ありがとうございました。

答えて

1

私はSE Unix & Linuxの質問の答えを自分で見つけました。

historyコマンドに二重ダッシュ(--)を使用すると、Bashビルトインコマンドがオプションとして後続するものを処理しないようにすることができます。だから私が変える必要があったのはこれでした:

history -s -- ${search_term[@]} 
関連する問題