次のようにキーボードを使用してキーの組み合わせを入力するのと同じ方法で、セッションから安全に分離するために(Ctrl++)をどのように表現できますか?adscreen
(echo -ne '\015')
これらの式を一種のスクリプトに入れたいです。 Linuxキーボードキー式マップなどがありますか?
答え1
私が知る限り、シェルで実行できるコマンドはありません。以内にscreen
このセッションから端末を分離するセッションです。screen
入力のみを表示ターミナルからマジックメタ文字(Ctrl- a)の場合、管理対象端末セッションに表示されないすべての項目screen
それ自体。説明するために - 文字の後に文字をdetachsequence
含むファイルを作成しました。Ctrlad
$ hexdump detachsequence
0000000 01 64
セッションcat
でこれを行うと、何も起こりません。ファイルは表示されません(制御文字は表示されますが)。screen
$ cat detachsequence
d
または同じように目にさらされませecho
んprintf
。
実際、cat
その中のファイルが自分に制御シーケンスを送信できる場合、screen
これは特に深刻なセキュリティ上の欠陥になります。screen
答え2
一般的な解決策は次のとおりです。
screen -d $STY
画面では、セッション名を$STY
変数に渡してscreen -d
使用できます。
分離した状態でコマンドを実行したい場合があります。次のようにできます。
screen -d $STY & yourcommand
メモ: screen -d
それ自体で十分です。を指定する必要はありません$STY
。
まず、分離されたスクリプトを起動することもできます。
screen -d -m /the/script
ただし、注意すべき点は、スクリプトが分離される前にスクリプトと対話できる時間枠がないことです。これを行う必要がある場合は、以前のソリューションが最善の選択である必要があります。
その他のソリューション(環境によって異なります):
セッション内の仮想端末でスクリプトを使用している場合は、制御シーケンスを端末に送信するというX
利点を享受できます。xdotool
xdotool key control+a+d
答え3
キーを押して、文字のCtrl-<letter>
文字コード1〜26をに送信します。つまり、またはisは文字1を送信し、またはorは2人などの文字を送信します。キャリッジリターン文字は、または13(10進数)またはです。A
Z
Ctrl-A^A
\x01
\001
^B
\015
^M
まあCtrl-A d
。\001d
しかし、どういうわけかそのシーケンスを転送したい場合は、screen
画面自体内で転送するのは簡単ではありません。 (ターミナルで行うことができます。外部のscreen
。 )
スクリプトから分離を要求するscreen
より簡単な方法はを実行することですscreen -X detach
。-S
分離する画面を指定し、STY
環境変数を使用して現在の画面のIDを見つけることができます。