端末をどのように起動し、そこにテキストを入力しますか?

端末をどのように起動し、そこにテキストを入力しますか?

私がよく

  1. 覚えていないコマンドを端末に書き込んでから

  2. を押す前に、クリップボードにパスまたはファイル名を貼り付けてくださいEnter

これは面白いと思いました。ショートカットで最初の部分を完成させる次に貼り付け、キー操作で上記の目的を達成します。


に基づいて「特定の項目を貼り付けるために特定のキーボードショートカットをどのように指定しますか?」への回答です。bash -c "xsel -ib <<< 'MY_COMMAND'"、コマンドをクリップボードに送信するショートカットを追加しました。ただし、端末に貼り付けると、最後に「Enter」(改行)があるため、コマンドは自動的に実行されます。

「xsel -ib <<< 'MY_COMMAND'」を実行すると、クリップボードが表示されます。


[これはKubuntu 20.04にあります。 ]

答え1

に基づいて「xselがテキストをクリップボードに送信するのを防ぐ方法(最後に空白/キャリッジリターンを含む)」への回答これで解決策ができました。端末を起動して新しい入力(入力、貼り付け)テキストを待つ方法がわかりません。たった一回の行動(スクリプト/コマンド/ショートカット)しかし、これを行うことができます。二つスピード:

  1. 関連ショートカットを使用してbash -c 'printf "%s" "MY_TEXT" | xsel -b' ; konsoleテキストをクリップボードに送信し、端末を開きます。konsole
  2. Ctrl-Vクリップボードのテキストを端末に貼り付ける(またはCtrl-Shift-V)

(これら2つのキーボード操作は元の質問の1つの項目を実装しています。YouTubeからオーディオをダウンロードするのが便利な例です。(#1)bash -c 'printf "%s" "youtube-dl -f bestaudio[ext=m4a]" | xsel -b' && konsole必要なコマンドをクリップボードにコピーして(#2)貼り付けることができる端末別の(#3)コピー+(#4)貼り付けを使用してYouTubeリンクを追加するウィンドウ - または単に一つドラッグアンドドロップ(例:#3)し、Enter(#4/5)を押します。実際に何も書かずに合計4~5個のキーボードとマウスの動作。 )

私はこれをコマンドで実装したいのですが、これはとにかく(質問本文ではなく)補足的な答えとして適していると思います。

答え2

端末をどのように起動し、そこにテキストを入力しますか?

端末で次のコマンドを実行します。

端末でテキストを入力したりコマンドを実行したりすることは非常に似ています。まず、端末を開き、コマンドを実行する方法を見てみましょう。

コマンドを実行するには、を実行しますkonsole -e MY_COMMAND
もちろんこれは欲しいものではありませんが、役に立ちます。
最初に言うべきことは、私が見たどの端末にも正式なオプションはありませんが、機能に応じて1つを作成できるkonsoleことです。現在、私はとを使ってこれを行う方法だけを知っており、他のターミナルエミュレータを使用してこれを実行する同様の方法があるかもしれません。konsole -e
gnome-terminalkonsole

多くのテストで大きな問題を発見しました。konsole -eコマンドの実行後に停止します。端末がkonsole -e sleep 1010秒間表示され、konsoleシェルコマンドを実行できないため、それ自体が閉じられます。
ただし、konsole端末内で作業を実行するには、端末が開いている必要があります。なぜですか?konsole -e top(タスクマネージャ)やkonsole -e vim(テキストエディタ)などの場合には意味があり、konsole終了時に終了しますvimvimたとえば、閉じることができるGUIテキストエディタと同じですgedit)。私にも
同じ問題があります。だから私が見たst -e MY_COMMANDgnome-terminal -- MY_COMMAND
この投稿問題を正確に解決します(ただし、機能している場合にのみ機能するため、gnome-terminal同様のxterm解決策がある場合とない場合がありますkonsole)。

gnome-terminal最初に実行したり、konsole特定のタスクを実行した後に終了しない関数を作成しましょう。

bash_in_gnome_terminal(){
    local IFS
    printf -v cmd %q ". ~/.bashrc; set -m; $*"
    gnome-terminal -- bash -c "bash --rcfile <(echo $cmd)"
}

bash_in_konsole(){
    local IFS
    konsole -e bash --rcfile <(printf '. ~/.bashrc; set -m; %s\n' "$*")
}

これをテストに使用でき、bash_in_konsole 'echo foo'次のような内容が表示されます。

foo
username@computer:~$

テキスト入力tmux:

最初はテキストを入力する必要があると思いましたが、xdotoolウィンドウにフォーカスが合わないと問題が少しあります。konsole通常、プレtmuxインストールされていません。 Debianベースのディストリビューションからインストールするコマンドはですsudo apt-get install tmux。実際には特徴がtmuxありますsend-keys。もちろん、一緒にいる場合はセッションをtmux実行する必要がありますtmux。たぶんtmux最初にインストールする必要があります。これがどのように機能するかを見るには、次のことを試してください。

  • tmux Enter(会議を開始します)。

  • Ctrl-b:(コマンドモードで入力)。

  • send-keys "echo foo"Enter(入力どおりに入力すると)次のような内容が表示されます。

    ユーザー名@コンピュータ:~$ echo foo

これで、次の2つの部分をマージできます
bash_in_konsole 'exec tmux new-session -A -t "temporary" \; run-shell "sleep .1" \; send-keys "C-u" "echo foo" "C-l"'
私は説明します:

  • exec端末を出るとtmux終了しますkonsole
  • new-session -A -t "temporary"以前にこのコマンドを使用したことがある場合は、同じセッションが開始されますが、セッションに膨大な数が割り当てられます。
  • send-keys "echo foo"echo foo端末に入力されます。
    残念ながら、このコードは2回作成されます(一度はシェルプロンプトの前に、一度はシェルプロンプト内)。
  • "C-u"この行は消去されます(-A -t "temporary"パラメータを使用する場合は必要です)。
  • "C-l"また、キーを押して送信され、画面を消去するCtrl-l公式のショートカットです(2回は表示されません)。bash
    echo foo
    ノートCtrl-Alt-l一部のシェルでも動作します。おそらくbash
  • fooキーが押されるEnterまで別途鳴り広がりません。コマンドをecho foo必要に応じて変更することもできます。

最後に「Enter」(改行)がないクリップボード:

URLをコピーした場合、http://youtube.com/foobar出力にはxsel -ob末尾の改行文字\n(通常はEnterキーを押したときに表示される文字と同じ)が含まれます。状況に応じて、次のことができます。

  • 末尾の空白なしで最初の行のみを取得します。xsel -ob | head -1 | tr -d "\n"
  • 改行の代わりにスペースを入れるには:xsel -ob | tr "\n" " "
    空間はなぜあるのでしょうか?「何も」の代わりに?これは、複数のURL(複数行)をコピーしてyoutube-dlスペースで区切られたビデオセットをダウンロードできるためです。

警告する::あなたの場合はyoutube-dlYouTubeのURLを使用しており、タイムスタンプなどのコンテンツを含めることができます。これは、Webブラウザでビデオを起動するとhttp://youtube.com/foobar&t=21m17sビデオが自動的に起動されることを意味します。21:17また、何らかの理由でタイムスタンプが自動的に表示されることがあります。 &記号は分岐コマンド&です。つまり、誤って押すと計算が難しくなるというbash意味だ。通常、エスケープされてYouTubeのURLに表示されるなどの文字をエスケープしようとすることもできますが、次を使用している(および他の一部のシェル)ユーザーにのみ次を使用すると、エラーメッセージが表示されます。Ctrl-cEnter?=zshzsh?no matches found

  • bash、アンパサンドだけエスケープします: xsel -ob | tr "\n" " " | sed "s/&/\\\\&/g"
  • zsh、問題の記号3つをエスケープする: xsel -ob | tr "\n" " " | sed "s/\(?\|=\|&\)/\\\\\1/g"
    メモ:ほとんどの場合、読者はユーザーであるとbash仮定しますが、個人的に使用するため、zshほとんどのコマンドも適用する必要がありますzsh。他のシェルの使用に問題がある場合はお知らせください。

公式ソリューション(最初の3つの部分マージ):

ステップ0:私は読者がこれを行うためにbashkonsoleおよびyoutube-dlコマンドを使用したいと思い、入力されたコマンドにクリップボードの内容を含める必要があると仮定します。私もこれが近道だと仮定していますkonsole(ただ、端末でこれを実行している他の読者の場合は、編集~/.bashrc後に再ロードする必要があります)。

ステップ1:tmuxそれ以外の場合はインストールしてください。

ステップ2:次の7行をコピーして~/.bashrcファイルに貼り付け、ファイルを保存します。

bash_in_konsole(){
    local IFS
    konsole -e bash --rcfile <(printf '. ~/.bashrc; set -m; %s\n' "$*")
}

tmux_in_konsole(){
    bash_in_konsole 'exec tmux new-session -A -t "temporary" \; run-shell "sleep .1" \; send-keys "C-u" "' "$*" '" "C-l"'
}

ステップ3:これでテストできますtmux_in_konsole "youtube-dl -f bestaudio[ext=m4a] $(xsel -ob | tr "\n" " " | sed "s/&/\\\\&/g")"。これはショートカットに入力する必要があるコマンドですkonsole。 URLをコピーしたとしますhttp://youtube.com/watch?v=foobarlorem&t=10s。予想される結果は次のとおりです。

username@computer:~$ youtube-dl -f bestaudio[ext=m4a] http://youtube.com/watch?v=foobarlorem\&t=10s

ステップ3-2:(代替3)クリップボードの内容を貼り付けたくない場合は簡単です。を使用してテストできますtmux_in_konsole "youtube-dl -f bestaudio[ext=m4a] "。予想される結果は次のとおりです。

username@computer:~$ youtube-dl -f bestaudio[ext=m4a] 

ステップΩ:(終了時konsole)ダウンロードしたい動画のURLを入力し、youtube-dl動画のEnterダウンロードが完了したらこの端末を終了できます。
終了するにはtmuxクリックするだけですCtrl-bShift-d(シェルのように終了することもできますが、Ctrl-dこれはtmuxセッションが閉じられ、再び多くの数字が得られることを意味します)。ダウンロードが完了する前に誤って閉じられた場合は、
バックグラウンドで実行できます。ただし、意図的にこれを実行しないでください。最初のダウンロードが完了していない状態で2番目のインスタンスを実行すると、いくつかの問題(少なくともディスプレイ関連)が発生する可能性があります。konsoletmuxtmux_in_konsole


ノート:コメントの他の部分は最初にあなたの質問を誤解し、混乱してすべて削除しました。まだ修正履歴を見ながら確認できる方法があるのではないかと思います。必要に応じてコンピュータにコピーを保存します。
ノートA:代わりに個人的なzshショートカットはです。それでも最初のショートカットが表示されている場合は、私の部分で貼り付けエラーが発生しました。このコメントを見ると、私の間違いかもしれません! (しかし今回はそうではありません)Ctrl-Alt-lCtrl-l

関連情報