仮想セッション間をすばやく切り替える(画面?)


19

1つのパテウィンドウで仮想セッションをほとんど行わず、それらをすばやく切り替えたいと思います。それを行う最良の方法は何ですか?screen?私ctrl+adは別のセッションでデタッチしてから再アタッチできることを知っていますが、それは多くの入力のようです。

回答:


22

gnuの画面にあまり詳しくない場合にAnsgarが言ったことを拡張するために、1つの画面セッションに複数の「ウィンドウ」があれば、おそらく必要なことを達成できます。

ctrl+ acアクティブなスクリーンセッションで新しい「ウィンドウ」を作成します。あなたは(アンスガーが示されているように)で、複数のウィンドウを切り替えることができますctrl+ an次のウィンドウのために、そしてctrl+ ap前のウィンドウのために。

ctrl+ a"開いているすべてのウィンドウのリストが表示されます。

これらの簡単なショートカットを使用すると、複数の画面セッションを使用せずに目的を達成するために、異なる端末間を非常に迅速かつ簡単に切り替えることができます。

〜/ .screenrcに次の行を追加すると、開いているウィンドウと選択されているウィンドウが常に表示されるため、覚えていることでどのウィンドウを表示しているかを追跡する必要はありません。

hardstatus alwayslastline '%{= kg}[ %{G}%H %{g}][%= %{= kB}%?%-Lw%?%{+b r}(%{G}%n*%f %t%?(%u)%?%{r})%{-b B}%?%+Lw%?%?%= %{g}%]'

これは私が使用したいハードステータスの行ですが、完全にカスタマイズ可能です(manページを参照するか、「gnu screen hardstatus」についてGoogleで検索してください)。

他にもたくさんのことができます(たとえば、開いているウィンドウに名前を付ける)ので、いくつかのチュートリアルを読む価値があります。

クイック検索で見つけたカップルを次に示します。

http://news.softpedia.com/news/GNU-Screen-Tutorial-44274.shtml

http://www.ibm.com/developerworks/aix/library/au-gnu_screen/

そしてもちろん、最も便利なのは:

# From your terminal:
$ man screen

お役に立てば幸いです。

マシュー


2

はい、screen最も可能性の高い方法です。Ctrl+ an次のウィンドウ、Ctrl+ ap前のウィンドウに移動します。Ctrl+ a0.. 9を使用すると、特定の画面に切り替えることができます。


前のF11、次のウィンドウのF12など、より高速なキーバインドを設定できます。また、画面のエスケープ文字を^a別の文字に変更します。bashでemacsスタイルの行編集を使用するのはとんでもなく面倒ではありません。を使用します^t
ピーターコーデス

1

他の人の言うことは正しい。ただ言及したいのtmuxは、の代替screenです。それらは非常に似たコマンドを持っています。

両方screentmux実行中のセッションの複数のウィンドウを提供し、これはおそらくあなたが望むものです。 tmuxさらに、複数のセッション間でジャンプすることもできます(各セッションには独自のウィンドウがあります)。必要になることはほとんどありません。

画面のドキュメントへのリンクとtmuxに関するクラッシュコースを次に示します 。


1

かなりの時間が経った後、この完全に欠落している機能を回避するスクリプトを作成しました。まず、fifoが必要です。

mkdir ~/.screen
mkfifo ~/.screen/pipe

この名前付きパイプは、切り離されたセッションと「スクリーンなしのメイン」セッション間の通信に役立ちます。

ファイルsc($ PATH内):

#!/bin/bash
CONFIGFILE=~/.screen/"$1""rc"

if [ ! -r $CONFIGFILE ] ; then
   echo "Configurazione per $1 Assente" >&2
   exit 1
fi

exec 3<> ~/.screen/pipe

if [ "$STY" != "" ] ; then
   screen -d "$STY"
   echo "$1" >&3
else
   screen -r "$1" 2>/dev/null || screen -S "$1" -c $CONFIGFILE
   while true ; do
      read line <&3
      screen -r "$line" 2>/dev/null || screen -S "$line" -c ~/.screen/"$line""rc"
   done
fi

「CONFIGFILE」の例は次のとおりです。〜/ .screen / Monitorrc

layout new Monitor

screen -t "bash" bash --login
split -v
focus next
split 
focus bottom
screen -t "cv" sh -c "watch /usr/bin/cv -w"
split
focus bottom
screen -t "sys.log" sh -c "tail -F /var/log/sys.log"
focus up
focus up
resize 25
screen -t "top" sh -c "top"
focus left

結果は次のとおりです。画面タイプを起動する場合:

sc Monitor

またはあなたが発明したい別のsessionrc、私はさまざまなものにセッションワークを使用します

例:〜/ .screen / Workrc

layout new Work  
screen -t "bash" bash --login  

次のように入力すると、セッションモニターが表示されます。

sc Work

セッションモニターはそれ自身を切り離し、namedpipeに「Work」を書き込みます。その結果、最初のscスクリプトが先に進み、セッション「Work」をアタッチします。
セッションモニターから呼び出されたscは閉じます。

すべてのセッションをデタッチすると、無限ループに陥るため、Ctrl-cを実行して終了する必要があります。


1

これは、次のような単純なシェルスクリプトを使用して実行できます。

    for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done 
  1. 開いている画面がほとんどないと仮定しましょう。また、仕事とデータとして分類されていると仮定しましょう。

    for i in {10..13}; do screen -S `printf data%02d $i`; done;
    for i in {0..5}; do screen -S `printf work%02d $i`; done;
    ...
    
  2. を適用するとscreen -ls、このような画面が表示されます

    There are screens on:
        81592.data13    (Detached)
        81539.work04    (Detached)
        81527.work02    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81533.work03    (Detached)
        81488.work00    (Detached)
        81607.ttys014.Mo    (Attached)
        81545.work05    (Detached)
        81580.data11    (Detached)
        81521.work01    (Detached)
        81515.work00    (Detached)
    12 Sockets in /var/folders/qs/cvlbhpr54fnb96vtx01bs9k00000gn/T/.screen.
    
  3. を使用して、切り離された画面を分離しますgrep

    screen -ls | grep Detached
    

このようなものを取得する必要があります

        81592.data13    (Detached)
        81539.work04    (Detached)
        81527.work02    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81533.work03    (Detached)
        81488.work00    (Detached)
        81545.work05    (Detached)
        81580.data11    (Detached)
        81521.work01    (Detached)
        81515.work00    (Detached)
  1. もう一度を使用して、必要なもの(データなど)を選択しますgrep

    screen -ls | grep Detached | grep data
    

これにより、データ画面のみが分離されます。grepキーワードを正規表現で変更して検索し、検索をカスタマイズできます。

        81592.data13    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81580.data11    (Detached)
  1. 幸いなことに、結果は適切に構造化され、タブで区切られています。次に、列をフィールドに分割し、を使用して2番目のフィールドを選択しますcut

    screen -ls | grep Detached | grep data | cut -d'       ' -f2
    

デリミタパラメータの後にctrl+vを挿入するtabには、Tab キーを押す必要があります-d。結果は次のようになります。

81592.data13
81586.data12
81574.data10
81580.data11
  1. 次に、これを...引用符を使用してコマンドにパックし、このような結果をループします。実際に実行する前に、必ず最初に定式化されたコマンドを確認してください。私は使ったecho screen -r

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        echo screen -r $s; \
    done
    
  2. すべてがうまくいったら、なしで試してくださいecho

    for s in `screen -ls | \
    grep Detached | grep data | \
    cut -d'     ' -f2`; do \
        screen -r $s; \
    done
    
  3. 出来上がり。デタッチする各画面から次の画面に移動します。

ハッピースクリーニング!!


これは本当にいい答えであり、このサイトの全体的な品質を向上させます。
123456789123456789123456789

1

ユーザーが矢印キーを使用して、リストからアタッチするスクリーンセッションを選択できるようにするノードスクリプトを作成しました。私はそれをnpmパッケージにしました。こちらで確認できます:screen-command。またはnpm i -g screen-command、node.jsが既にインストールされていると仮定して、試してみてください。パッケージをインストールした後、コマンドscを使用して画面のリストを呼び出します。

これにより、希望する正確な画面に簡単に切り替えられることを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.