コマンドの親シェルに戻るために画面内でコマンドを実行するにはどうすればよいですか?

コマンドの親シェルに戻るために画面内でコマンドを実行するにはどうすればよいですか?

親シェルにアクセスできるようにスクリーンセッションでコマンドを実行する最良の方法は何ですか?同じ画面セッションで再開できるようにしたい。

私が思いついた最善の方法は次のとおりです。

$ cat mr-t.sh 
#!/bin/bash

top
exec /bin/bash

それから:

screen -e'^\\\' -S top-in-screen ./mr-t.sh

その後、topの実行が停止したら、少なくとも利用可能な同じスクリーンセッションから新しいシェルを取得します。しかし、これはあまりエレガントではなく、CCを押すと信号が正しいプロセスに確実に送信されると自信がありません。また、Czはまったく機能しません。

私はOSXでbash 3.2.48を使用し、Linuxではbash 3.2.39を使用しています。どちらもオペレーティングシステムベンダーからパッチを適用できます。

topもちろん、ここのコマンドには特別なものはありません。

[ところで、-e'^\\\'MagicスクリーンキーをCa(存在する場合はひどいデフォルト値)からC-\に再割り当てします。 ]

答え1

次のように1つを作成します~/.screenrc.top

screen
stuff "top\015"

今実行してくださいscreen -c ~/.screenrc.top。競争条件はありません!

答え2

私が見つけた不完全な解決策は次のとおりです。

screen -e'^\\\' -dmS top-in-screen

その後、次を実行できます。

screen -S top-in-screen -p 0 -X stuff 'top^M'

^M(ただし、実際に入力する必要がある内容のみ表示され、C-vすぐに入力できますC-m。)

最初の呼び出しと2番目の画面呼び出しの間に競合状態があるため、完璧ではありません。

~からhttp://aperiodic.net/screen/faq#how_to_send_a_command_to_a_window_in_a_running_screen_session_from_the_commandlineには他の有用な情報がたくさんあります。

答え3

この質問をした後、私は異なっていますが、より効率的なソリューションを採用しました。tmuxの使用

新しく名前が付けられた別々のセッションを開始します。

$ tmux new -d -s top

0番目のウィンドウにコマンドを送信します。

$ tmux send-keys -t top:0 "top" C-m

C-mEnterキーを押すのと同じです。多くの場合、それはあなたが望むものです。時にはそれを無視したいかもしれません。

tmuxのコマンドセットはよく文書化されています。したがって、それを駆動するためにより複雑なスクリプトを書くのは簡単です。


通常、これは非常に奇妙な答えになるでしょうが、これは私の質問なので、特に安定して動作する他の方法を実際に得たことがないので、少し余裕があります。対照的に、私は最初の試みでtmuxを正しくスクリプトできました。

関連情報