CLIでコマンドを起動している間、起動したばかりのコマンドをコピーしたいまたはターミナルで書き込んだものとどこかに貼り付けますマウスを使用せずに。
次の図のように、マウスを使用せずに更新コマンドを(完全または部分的に)コピーしてどこかに貼り付けたいと思います。
選択したターミナルエミュレータ内で screen(1)
を使用できます(xterm
、gnome-terminal
、...)。
必要な機能はscreen
に組み込まれています。あなたはそれが機能する方法に慣れる必要があります:
コマンドを「コピー」して、別の端末に「貼り付け」ることができます。
screen
は楽しいので、使い始めると、まったく使用していなかった可能性があるのではないかと思うでしょう。
すでに提供されている回答に加えて、より柔軟なターミナルエミュレータへの移行を検討できます。
端末を rxvt-unicode に変更する準備ができている場合は、 rxvt-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
コマンドをkill(cut)するだけで、同じターミナルに貼り付けることができます CtrlK 次に貼り付け CtrlY。
Bashの履歴を使用して、端末間でコマンドを保存することもできます。この行を~/.bashrc
に追加します:
Prompt_COMMAND='history -a; history -r'
Prompt_COMMAND
は特別なbash変数です。設定されている場合、値は新しいプロンプトを発行する前にコマンドとして実行されます。 history -a
は現在のセッションの履歴を履歴ファイルに書き込み、history -r
はそのファイルを再読み込みします。つまり、実行するすべてのコマンドが履歴ファイルにすぐに書き込まれます。
これで、長いコマンドラインを実行するときに、別のターミナルに切り替えてReturnキーを押すことができ($PROMT_COMMAND
を実行するか、新しいターミナルウィンドウを開くだけです)、このターミナルの履歴にアクセスできます。あなたが今ヒットした場合 Up 新しいターミナルで実行できます。
@evilsoupは良い解決策を提案していますが、頻繁に失敗します。
これが壊れないソリューションです。
history | tail -2 | head -1 | xclip -selection clipboard
このコマンドを実行するだけで、実行したコマンドがクリップボードにコピーされます。
基本的には、コマンド履歴を出力し、最後から2番目のコマンドを取得してクリップボードに送ります(最後のコマンドはこれ自体なので、最後から2番目のコマンドを選択します)。
迅速な解決策に基づいて開発した、これは私が書いた小さな関数です。これはかなりスマートで、最後に使用したコマンドをコピーします。数値引数を指定して、last-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スクリプトファイルに入れてスクリプトを実行すると、履歴コマンドがその履歴にアクセスできなくなるため、機能しないことに注意してください。
最後に、次のように実行します。
myclipcopy 3
# This copies the third-last command
さらに、この関数に追加された素晴らしい機能の1つは、実行後に履歴から自分自身を削除することです。コマンドの「後方」インデックスは変更されないため、これは役立ちます。
このコマンドは、bashの履歴拡張(so !!
は、端末に入力した最後の行に展開されます)。おそらくxclip
またはxsel
をインストールする必要があります。
echo "!!" | xclip -selection clipboard
echo "!!" | xsel -i --clipboard
これにより、最後のコマンドが Ctrl+v クリップボード。これにより、任意のGUIプログラムに貼り付けることができます(または Ctrl+Shift+v ほとんどの端末エミュレータ、または"+p
in vim)。
これは二重引用符を含むいくつかの行で壊れます、例えば:
$ 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 $(pwd) 1> tempo
ファイルから方向を取得するには、コマンドを使用します
cd $(tail -n 1 tempo)
コマンドをコピーして貼り付ける場合、このシステムはもちろんどちらでも機能します。お役に立てば幸いです