私はOpenboxウィンドウマネージャでArchとbashを使用しています。
すべてが最新の状態です。
Openboxは次のように構成されています。rc.xml
内部的には、通常、必要な一連の便利なコマンドをショートカットに接続するためrc.xml
に呼び出します。bash -c 'command1; command2; etc'
rc.xml
次のように定義されたショートカットがあります
<keybind key="1"><action name="Execute"><command>bash -c '
command1;
command2;
etc;
yad --timeout=1 --text="$pos_x x $pos_y";
'</command></action></keybind>
$pos_x
グローバルに定義されて表示されない変数を除いて、すべてが期待どおりに機能し、完全に機能します$pos_y
。
これは.bashrc
次のように定義されます。
export pos_x=1000
export pos_y=500
新しいbashシェルターミナルウィンドウを開いて入力すると、予想される1000 x 500が
echo "$pos_x x $pos_y"
表示されます。
ただし、この新しい端末ウィンドウに入力すると、
bash -c 'echo "$pos_x x $pos_y"'
子プロセスはグローバル変数を継承しないため、何も表示されません。
入力すると
bash -c 'source ~/.bashrc; echo "$pos_x x $pos_y"'
何も表示されないため、子プロセスから.bashrcをインポートすることは役に立ちません。
定義されたグローバル変数を.bashrc
子プロセスに渡すには?
私は周りを見回したが、答えが見つかりませんでした。
ベストアンサー1
Archのデフォルト設定には、~/.bashrc
ファイルの上部に次の行が含まれています。
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
これにより、非対話型シェルはその行からファイルの読み取りを停止します。bash -c
非対話型シェルが起動されるため、ファイル~/.bashrc
全体を読み取ることができないため、変数は定義されません。
したがって、次のことを試すことができます。
~/.profile
代わりに変数を入れてください~/.bashrc
。とにかく、これはグローバル変数の自然な場所です。ログイン管理者がこの内容を読む限り、/.profile
機能します。別のファイルを使用してください。そこに変数定義を入れる必要はありません
~/.bashrc
。変数定義を入れて~/foo
からコマンドを実行するだけですbash -c '. ~/foo; echo "$pos_x x $pos_y"
。読み取りを停止する最初の部分に表示された行の上に変数定義を配置します
~/.bashrc
。