.bashrcのshopt -s extdebugがスクリプトファイルでは機能しません

.bashrcのshopt -s extdebugがスクリプトファイルでは機能しません

echoo.sh私はコマンドを実行する前にコマンドをエコーすることを目的としてbashスクリプトを書いています。私のソースのスクリプトです.bashrc。しかし、私が実行している他のbashスクリプトには影響しません。これまで私のコードは次のようになります。

エコ

#!/usr/bin/env bash
shopt -s extdebug
get_hacked () {
    [ -n "$COMP_LINE" ] && return  # not needed for completion
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # not needed for prompt
    local this_command=$BASH_COMMAND;
    echo $this_command;
}
trap 'get_hacked' DEBUG

シェルを開き、コマンドを実行すると機能します。ただし、スクリプトファイル内のコンテンツには機能しません。

いくつかの追加試み:

  1. .bashrcテストスクリプトからファイルをインポートしようとしましたが、機能しません。
  2. echoo.shテストスクリプトの内部コンテンツを入手して動作しました。

だから理解しようとしています。

  1. .bashrcスクリプトで実行されているコンテンツに対してスクリプトソースのみを使用しても機能しないのはなぜですか?
  2. #2が動作したら#1を試してみてはいかがですか?

echoo.sh最後に、操作するためにすべてのスクリプトファイルのソースコードをインポートする必要がないようにするにはどうすればよいですか?スクリプトを一箇所に置き、いくつかの設定を変更してすべてのシナリオで動作させることができますか?

ベストアンサー1

私はすべての試みをテストし、Archlinux、bashバージョン4.4.12で動作します。ただし、~/.bashrc新しいシェルを取得するには、新しい対話型シェルを開く必要があります。

非対話型シェル~/.bashenvrcexport BASH_ENV=$(realpath ~/.bashenvrc)場合~/.bashrc

~/bashenvrcこれで、非対話型シェルを起動するたびにこのスクリプトをインポートします。

私もこれをテストしました。デーモン1.7.7-1

乾杯

おすすめ記事