i3wm
画面モード(外部画面、内部画面、すべて、またはミラー)を切り替えるために使用するこのbashスクリプトがあります。スクリプトの最初の部分は、画面の名前を取得します。次の部分をコピーして端末で実行する場合:
#!/bin/bash
xrandr|grep " connected primary"|IFS=" " read INTERNAL_OUTPUT con
xrandr|awk '/ connected/ && !/ primary/'|IFS=" " read EXTERNAL_OUTPUT con
echo internal monitor is $INTERNAL_OUTPUT
echo external monitor is $EXTERNAL_OUTPUT
...
私は次のようなものを得ます
$ ./script.sh
internal monitor is eDPI
external monitor is DPI-1
しかし、実際のスクリプトを実行すると、変数は空になり、表示されるのはすべて
$ ./script.sh
internal monitor is
external monitor is
スクリプト内で変数を設定するときの違いは何ですか?
どういう意味か分かりません。エコーを含む、スクリプト内のすべてが、動作しません。変数はまだ空です。
—
ecc
その場合、端末からどのように機能するかわかりません。それを機能させるための唯一の方法はで
—
AFH
xrandr|grep " connected primary"|{ IFS=" " read INTERNAL_OUTPUT con; echo internal monitor is $INTERNAL_OUTPUT; }
、他のモニターでも同様です。これは、端末とスクリプトの両方で機能します。
ターミナルでも私には機能しません...仮説:これは機能せず
—
キセノイド
bash
、あなたのコンソールは機能しないのでbash
(そこで機能します)(何と言っていls -l /proc/$$/exe
ますか?) bashルールを使用しているため、コードが失敗します。
変数を設定する場合は
—
AFH
bash
、次のようなものが必要ですINTERNAL_OUTPUT=$(xrandr|grep " connected "|grep -o '^[^ ]*')
。これによりINTERNAL_OUTPUT
、スクリプト内の後続の行で使用可能になりますが、で呼び出されない限り、端末に戻る際には使用できません.
。スクリプトを呼び出さずに現在のシェルで変数を設定するには.
、関数としてコード化する必要があります。
echo
コマンドがコマンドと同じスクリプト内にある場合、read
それらは機能するはずですが、.
/source
コマンドで呼び出さない限り、スクリプトの外部では機能しません。