bind -x '"\C-r"':reset
ターミナルをクリアするのに便利なこのコマンドを見つけましたが、簡単な bash スクリプトを作りたかったのです:
#!/bin/bash
bind -x '"\C-r"':reset
出力:
alfred@alfred-laptop:~/bash$ ./bind
./bind: line 2: bind: warning: line editing not enabled
誰か説明してください:
- これをどうすれば修正できますか?
- どういう
warning: line editing not enabled
意味?
答え1
そのスクリプトをソースする必要があります。. ./bind
または を実行してsource ./bind
、現在のセッションでそのキー バインディングをアクティブにします。
通常どおり実行すると、ターミナルがないため、そのエラー メッセージが表示されます。また、動作する場合でも、スクリプトの実行中のみアクティブになります。
キーバインドを永続的にしたい場合は、そのコマンドを に追加します~/.bashrc
。
答え2
私も同様のメッセージを受け取りましたが、私のメッセージは対話型 (ログイン) シェルの外部で実行されたスクリプトからのものでした。つまり、CGI スクリプト経由で実行されたシェル スクリプトでした。私のメッセージは次のとおりでした。
/home/richard/.bash_profile: line 4: bind: warning: line editing not enabled
実際には 4 行目ではありませんでしたが、bind
そのファイルには次の記述しかありませんでした。
bind 'set completion-ignore-case on'
もちろん、これは行編集が有効になっている場合、つまり対話型シェルの場合にのみ意味を持ちます。
答え3
受け入れられた回答を改善しようとしているだけです。
line editing not enabled
非対話型シェルで実行すると、bind
TTY が必要なので" " が表示されます。
bind
次のようにコマンドをチェックで囲みます。
if [ -t 1 ]
then
# standard output is a TTY
bind -x '"\C-r"':reset
fi
答え4
代わりにシェルが対話型かどうかをテストします。
これは私のディストリビューションのbashrcファイルで見つけたコードブロックです。
# Test for an interactive shell. There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.
# if [[ $- != *i* ]] ; then
# # Shell is non-interactive. Be done now!
# return
# fi