完全なGNU画面セッション状態を保存する


32

リブート後にすべてをリロードできるように、GNU画面ウィンドウ(または標準シェル)の「状態」を保持することは可能ですか?

  • 開かれたシェルの数
  • 各シェルの名前
  • 各シェルの現在のディレクトリ
  • 各シェルの歴史
  • 可能であれば、環境変数

回答:


19

完全なスクリーンセッションを保存することは実際には不可能です。

できることは.screenrc、システムを再起動した後にいくつかのことをセットアップする適切なものを作成することです。

あなたがリストしたものに対するいくつかのコメントがあります:

  • 開かれたシェルの数
  • 各シェルの名前
  • 各シェルの現在のディレクトリ

私はこのようなものを使用して.screenrc、起動時に特定のシェルを開きます:

## set the default shell
shell                   zsh

# screens
screen -t 'zsh'
screen -t 'mutt' mutt
screen -t 'zsh' /home/user/bin/scriptToRun
[..]

デフォルトのシェルで名前が実行された後、ウィンドウ名としての ''とコマンドの間の文字列を取得します。必要なスクリプトを含めます。たとえば、特定のディレクトリで変更し、いくつかのログを開きます。

  • 各シェルの歴史

セッション全体でシェルの履歴を共有することを考えたことがありますか?私見これは物事をはるかに簡単にします。ZSH setopt SHARE_HISTORYでは、.zshrc

  • 可能であれば、環境変数

これが本当に必要で、トレードオフが必要ない場合は、画面の現在の状態を読み取り、シェルの数、環境変数などを保存し、この情報をスタートアップスクリプトに入れるシェルスクリプトについて考えることができます。によって呼び出されます.screenrc。画面のデフォルトのウィンドウをカスタマイズできる場合は、再起動後にクリーンな環境に感謝するため、これは努力する価値はありません。


ご提案ありがとうございます。bashで履歴を共有する方法を見つけました(zshほど単純ではありません)ので、コマンドのストリームを1つ保持します。.screenrcについては、考えておく必要がありました。残念ながら、特定のスクリプトしか実行できないようです(「cd」などのコマンドは機能しません)が、それでも問題ないはずです。スクリプトでシェルを初期化できれば、環境変数は気にしません。
バーセレミー

cdはシェルの組み込み関数です。cdコマンドは「シェル」の外では意味がありません:-)しかし、shebangの後にcd / foo / barを含むスクリプトを単に含めることができます。その後、新しいシェルはこのディレクトリに変更されます。
echox

はい、私はこの区別を理解しています。コマンドが何らかの形でシェルに渡され、シェルで実行されると考えました。しかし、初期化スクリプトを書くことに問題はありません:-)共有された履歴は素晴らしいアイデアでした。
バーセレミー

10

screen-sessionと呼ばれるプロジェクトを見つけました。GNU Screenセッションをある程度保存および再ロードできます。


2

cryopidと呼ばれるプロセスの状態を凍結するツールがあります。ただし、現在はサブプロセスの階層の再作成をサポートしていないため、GNU画面では動作しません。彼らは将来これを達成したいと述べているが、現時点ではプロジェクトはあまり活発ではないようだ。それでも、あなたは彼らの進歩を追跡したいと思うかもしれません。


0

私は数年前に同様のことをソラリスで構築しました。画面にも関係ありません。セッション関連でした。「$ TTY =何でも」。echoxには正しい考えがあります。

ヒント:複数のマシンでこれを行っている場合、各マシンは、nfsマウントされた/ homeなどで同じであるのではなく、そこでログインするときに行うべきことを独自の定義に値することを認識してください。

HTH、-pbr

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