set -x:デバッグモードで作業しているときにタップが完了したために誤った出力が発生する

set -x:デバッグモードで作業しているときにタップが完了したために誤った出力が発生する

私はこれがset -xBashユーザーがデバッグモードに入ることを知っており、デバッグモードでフルタイムで働くことがBashで発生する可能性がある問題をよりよく処理するのに役立つと思います。

以下の使用に問題がありますset -x

ディストリビューション(Ubuntu 16.04)のデフォルトのタブ補完機能を使用してディレクトリ名を完成しようとすると、非常に長く誤った出力が表示されます。

たとえば、次のいずれかのコマンドを実行します$PWD/var/www/html/

cd ~/u[タブ完成完了uulcwe]

cd ~ && cd u[タブ完成完了uulcwe]

どちらの例も非常に長く歪んだ出力を得ます。

+ return 0
+ local -a toks
+ local quoted x tmp
+ _quote_readline_by_ref '~/u' quoted
+ '[' -z '~/u' ']'
+ [[ ~/u == \'* ]]
+ [[ ~/u == \~* ]]
+ printf -v quoted '~%q' /u
+ [[ ~/u == *\\* ]]
+ [[ ~/u == \$* ]]
++ compgen -d -- '~/u'
+ x='~/ulcwe'
+ read -r tmp
+ toks+=("$tmp")
+ read -r tmp
+ [[ -d != -d ]]
+ [[ -n '' ]]
+ [[ 1 -ne 0 ]]
+ compopt -o filenames
+ COMPREPLY+=("${toks[@]}")
+ return 0
lcwe/

lcwe最後まで注意してください。

上記の出力は、より大きな出力の一部にすぎません。

デバッグモード()でフルタイムで作業を続けますset -xが、[実行]タブが完了したときにすべての出力が表示されない可能性がありますか?

ベストアンサー1

これは、使用中のシェルのプログラム可能な完了機能によるものです。

のコマンドとファイル名のデフォルトタブが完成したら、bash次の手順を実行します。

complete -r

~/.bashrc現在のシェル環境内で、関数呼び出しなどに関連する「クール」(プログラミング可能)完成を排除できます。

プログラム可能なコンプリートをオフにしても、デフォルトのファイル名の完成(質問の例で行ったように)は機能し続けます。

プログラム可能な補完機能は一部のシェルで利用でき、コマンドラインの状態などを確認するコールバック関数を連結することで、ユーザーが次に挿入できる文字列を見つけることができます。たとえば、sshthenと入力するSpaceとファイルを解析して接続するホスト名を取得する関数をTab呼び出すことができ、thenと入力すると関数はコマンドを実行して現在のリポジトリで利用可能なブランチを見つけることができます。~/.ssh/configgit checkoutSpaceTabgit

一部のユーザーは、速度や生産性の理由からプログラム可能な完成機能を使用していますが、そうです。set -x対話型シェルセッションで有効になっている場合、これらの操作は端末からトレース出力を生成します。


Tab私は「背中の後ろから魔法をかぶる」簡単な押さえをしたくないので、どのシェルでもプログラム可能な完成が好きではありません。いろいろな興味深い方法で。私も少し怠惰だと思いますが、それはあくまで私の個人的な考えだけです。

おすすめ記事