回答:
あなたは使用することができますscreen(1)
(お好みの端末エミュレータ内xterm
、gnome-terminal
、...)。
必要な機能はに組み込まれていscreen
ます。あなたはそれがどのように機能するかを理解する必要があります:
コマンドを「コピー」して、別の端末に「貼り付け」できます。
screen
楽しいし、一度使い始めたら、どうしてそれをまったく使っていないのか不思議に思うでしょう。
screen
コマンドがなかったので、私はgnome-terminalにインストールし、ターミナルで起動しscreen
ました。しかし、その後始められませんでした。また、組み込みの画面が何を意味するのか理解できませんでした。
man screen
。また、私は「内蔵の書いた中でのコピーを意味し、画面」/機能が中に存在して貼り付けるscreen
デザインによって。
space
キーを使用して必要な領域を選択する必要があります。Y
行全体または望ましい領域をコピーするために使用する必要があります。画面はvi
動きやすいです。
AltGr
キーは何ですか?私が持っているAlt
screen
このツールは、この関数は、ここで説明していません。そして、それは質問への答えを提供していないようです。
既に提供されている回答に加えて、より柔軟なターミナルエミュレータへの移行を検討できます。
端末をrxvt-unicodeに変更する準備ができていれば、urxvt-perlsのようなツールを使用できます。このツールは、その端末エミュレータで次のキーボード機能を提供するスクリプトのコレクションです。
パッケージをインストールし、に数行追加するだけで~/.Xresources
、げっ歯類を抜くことができます。
次のようなプログラムを使用してこれを行うことができますxclip
。
NAME
xclip - command line interface to X selections (clip‐
board)
インストールしたら、それを使用してXクリップボードに接続できます。残念ながら、これはmysql
環境では機能しません(コピーされた行用の独自のバッファがあります)が、「通常」のコマンドを実行する場合は機能します。例えば :
$ This is a long command line
入力CtrlAして行の先頭に移動し、コマンドを引用符で囲んでエコーします。
$ echo -e "This is a long command line" |xclip
中央のクリッククリップボードに「これは長いコマンドラインです」と表示されます。
マウスを使用せずに貼り付ける場合は、貼り付け先によって異なります。次を実行することにより、別のターミナルに貼り付けることができます。
$ xclip -o
でコマンドを強制終了(カット)しCtrlKてからで貼り付けるだけで、同じ端末に貼り付けることができCtrlYます。
bashの履歴を使用して、端末間でコマンドを保存することもできます。以下にこの行を追加します~/.bashrc
:
PROMPT_COMMAND='history -a; history -r'
PROMPT_COMMAND
は特別なbash変数です。設定されている場合、値は新しいプロンプトを発行する前にコマンドとして実行されます。history -a
現在のセッションの履歴を履歴ファイルに書き込み、history -r
そのファイルをリロードします。これは、実行するすべてのコマンドがすぐに履歴ファイルに書き込まれることを意味します。
長いコマンドラインを実行すると、別のターミナルに切り替えてリターンキーを押すことができます(単に実行するか$PROMT_COMMAND
、新しいターミナルウィンドウを開きます)。このターミナルの履歴にアクセスできます。ヒットしUpたら、新しいターミナルで実行できます。
$ xclip -o
は私がxclipe
dを印刷するだけなので、私は欲しいものではないと思います。ただし、少なくとも同じ端末でのカットアンドペーストの場合とCtrl+A
その後の場合は+1 。Ctrl+K
Ctrl+Y
@evilsoupは良い解決策を提案しましたが、しばしば壊れます。
ここで壊れることはありませんソリューション。
history | tail -2 | head -1 | xclip -selection clipboard
このコマンドを実行するだけで、実行したコマンドがクリップボードにコピーされます。
基本的に、コマンド履歴を出力し、最後から2番目のコマンドを取得してクリップボードに送ります(最後のコマンドはこれ自体なので、最後から2番目のコマンドを選択します)。
迅速なソリューションで開発しているのは、私が書いた小さな関数です。これは非常に賢く、最後に使用したコマンドをコピーします。最後のn番目のコマンドをコピーする数値引数を指定することもできます。たとえば、最後から2番目のコマンドをコピーする場合2
は引数として指定します
myclipcopy () {
if [ -z $1 ]
then # if no argument was provided then just copy the last used command
history | tail -2 | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g' | xclip -selection clipboard
echo 'Anyways, the following command has been copied:'
history | tail -2 | head -1| sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g'
else
myindex=$(( $1+1 ))
history | tail -$myindex | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g' | xclip -selection clipboard
echo "The following command has been copied:"
history | tail -$myindex | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g'
fi
#Delete this command itself from the history
myhisnum=$(history | tail -1 | grep -oP '\s\d+\s' | grep -oP '\d+'); history -d $myhisnum
}
上記の関数を~/.bashrc
ファイルにコピーアンドペーストします。これを別のbashスクリプトファイルに入れてスクリプトを実行すると、historyコマンドは履歴にアクセスできなくなるため、スクリプトは機能しません。
最後に、次のように実行します:
myclipcopy 3
# This copies the third-last command
さらに、この関数に追加されたすばらしい機能の1つは、実行後に履歴から自身を削除することです。これは、コマンドの「後方」インデックスが変わらないため便利です。
screen
。2番目に高い評価の回答も想定されbash
ていましたlinux
。さらに、bash
スクリプトはzshまたは他のほとんどのシェルで機能するため、仮定は大した問題ではありません。
このコマンドは、bashの履歴展開を使用します(したがって!!
、端末に入力した最後の行に展開します)。xclip
またはをインストールする必要がありxsel
ます。
echo "!!" | xclip -selection clipboard
echo "!!" | xsel -i --clipboard
これにより、最後のコマンドがCtrl+ vクリップボードに格納されるため、任意のGUIプログラムに貼り付けることができます(または、ほとんどのターミナルエミュレーターで、またはvim でCtrl+ Shift+ vを使用し"+p
て)。
これは、たとえば、二重引用符を含むいくつかの行で壊れます。
$ echo "foo;bar"
foo;bar
$ echo "!!"
echo "echo "foo;bar""
echo foo
The program 'bar' is currently not installed. You can install it by typing:
sudo apt-get install bar
ただし、例として指定したコマンドに対しては機能します。二重引用符がエスケープされている場合などにのみ問題が発生するはずです;
&
&&
|
||
。
echo !!
ます(以前のコマンドが開始された-n
、-e
またはecho
それ自体が取る他のいくつかのオプションを除く)。
たぶん最も便利な解決策ではないかもしれませんが、私はそれを使用しているので、追加のソフトインストールを必要とせず、他の人にとってより役立つ場合があります。
便利なディレクトリに一時ファイルを作成する必要があります
必要な指示またはテキストをそのファイルに転送します。方向を転送するために使用できます
echo $(pwd) 1> tempo
ファイルから方向を取得するには、コマンドを使用します
cd $(tail -n 1 tempo)
コマンドをコピーして貼り付ける場合、このシステムはもちろん動作します。お役に立てば幸いです