コマンドをTTYに貼り付ける方法は?


20

クリップボードにコピーしたかなり長いコマンドとファイルパスがあり、TTYで実行する必要がありますが、ファイルパスは長すぎて再入力できないため、$(コマンドを前に再入力できますそれら))、これを行う方法はありますか?

だから私はコマンドを実行して、次のように次の行$にテキストをクリップボードにコピーするようにしたいと思います:

$ specialCommandToPasteText
$ pastedText

Ubuntu GNOME 16.04とGNOME 3.20を実行しています。


3
テキストエディターでコマンドをBashスクリプトに貼り付け、TTYからスクリプトを実行しますか?
ニックワインバーグ

@NickWeinberg:実際にはオプションではありません。これはすべてCLIにあり、そこで実行しているプログラムにはコピー機能しかありません。

2
どのプログラムからコピーしていますか?
ニックワインバーグ

前の質問に対するあなた自身の答えでgpm示唆されているように、VTでマウスサポートを提供するために使用していますか?
スチールドライバー

1
一つの可能な解決策は、/で機能を貼り付けコピーを使用することであろうtmuxのか、スクリーン
ニック・ワインバーグ

回答:


28

簡単ですが、追加のツールが必要です。

  1. xselクリップボードにアクセスする簡単なコマンドを提供するパッケージをインストールします。

    sudo apt-get install xsel
    
  2. $DISPLAYデスクトップが使用しているものを調べます。通常はであるはず:0ですが、GUIデスクトップのターミナルエミュレータで次のコマンドを実行して確認できます。

    echo $DISPLAY
    

    出力が:0であると仮定しますが、異なる場合は、次のコマンドの実際の出力に置き換えます。

  3. Ctrl+ を使用して、TTYで実行するコマンドをコピーしますC

  4. 使用するTTYに切り替えます。たとえば、Ctrl+ Alt+ を使用してTTY1に切り替えF1ます。
    ユーザー名とパスワードを入力してログインします。

  5. 実行する完全なコマンドを入力しますが、クリップボードから挿入する部分をに置き換えます$(DISPLAY=:0 xsel -ob)

    たとえば、インストールするパッケージの大きなリストをコピーした場合、これをTTYに入力できます。

    sudo apt-get update && sudo apt-get install $(DISPLAY=:0 xsel -ob)
    

    クリップボードスニペットは必ずしもコマンドの最後にある必要はありませんが、どこにでも表示される場合があります。


物事をさらに簡素化するために、これをまだ少し複雑なDISPLAY=:0 xsel -obスクリプトに移動しましょう。名前を付けますPASTEpaste既に使用されているため)が、別の方法で呼び出すこともできます。

すべてのユーザーがフルパスを指定せずに実行できる場所にスクリプトファイルを作成し(これを推奨/usr/local/binします)、実行可能にするには、次の2つのコマンドを実行します。

( echo '#!/bin/bash' && echo 'DISPLAY=:0 xsel -ob' ) | sudo tee /usr/local/bin/PASTE
sudo chmod +x /usr/local/bin/PASTE

これで$(PASTE)、デスクトップからクリップボードのコンテンツをそこに挿入するために、TTYのコマンドに簡単に埋め込むことができます。


2
ありがとう!これは、私が最初に尋ねたものよりも多くのことで今私を助けます!:)

1
DISPLAY=:0 xsel -obBashエイリアスまたは小さなスクリプトとして任意の場所に保存して(名前を付けましょうPASTE$(PASTE)、コマンドでクリップボードの内容を使用するような短縮形のみを使用することもできます。
バイトコマンダー

非常に良いアプローチ
セルギーKolodyazhnyy

21

個人的には、テキストファイルを使用しています。

  1. デスクトップ環境で、ターミナルを開き、

    echo "whatever long text you have copied" > file
    
  2. ttyにドロップして

    $(cat file)
    

2
これは知っておくと良いことです。実際、このような単純なコマンドがこれほどうまく機能するとは思いませんでした。時々、心は複雑すぎると考えます。ありがとうございました!=)
テランス

1
some-command 'shift + insertを使用して貼り付けます。 '戻ります。一重引用符または二重引用符内に貼り付けると、問題を修正するために編集する前に、貼り付けたテキストの改行がコマンドを実行できなくなります。IDKは、テキストをファイルに入れることで得られるものです。Bashには、単語ごとに移動するctrl-leftまたはctrl-right矢印などの非常に強力な行編集キーストロークがあります。後方単語を削除するalt-backspace。Alt-dを使用して前方の単語などを削除します。
Peter Cordes

ああ、私はちょうど彼がTTYを言うときOPがテキストコンソールVTを意味することを理解しました。シェルを実行できるすべての端末はttyであり、xtermのようなプログラムによって制御される擬似端末を含むため、誰かが本当に質問を編集する必要があります。
ピーターコーデス

@PeterCordesそうですが、「tty」という用語は、不正確ではあるが、多くの場合、仮想コンソールを指すために使用されます。
テルドン

4

上記にリストされていない別の可能な回避策には、コマンドモードvimでの貼り付けと実行の使用が含ま:!unix_commandれます。

  1. コマンドとパスをクリップボードにコピーします
  2. 開きvim、コマンドモードに進みEsc、プロンプトを入力します:
  3. 感嘆符! を入力し、プロンプトで以前にコピーしたコマンドをCtrl+ Shift+ 貼り付けてV実行します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.