回答:
私の答えは、3つの異なる構文で簡単なコマンドを提供します。これらはすべて同じように機能しますが、1つは2つ目よりも少し短く、入力しやすいです。3番目のバリエーションはいわゆるエイリアスです。つまり、コマンドにカスタム名を割り当て、複雑なものを覚える必要なく、それを実行して呼び出すことができます。
最初に、xsel
ターミナルからXクリップボードにアクセスできるパッケージをインストールします。
sudo apt-get install xsel
その後、次の行を入力して、前のコマンドをクリップボードにコピーできます。
xsel -ib <<<!!:q
あなたが2番目に新しいコマンドをコピーしたい場合は、交換する!!
と!-2
第三最新の使用のために、!-3
そしてそうで。
実行しているものを説明するために、ここでコマンドの短い内訳を示します。
xsel
Xクリップボードにアクセスするためのコマンドラインツールです。
詳細については、オンラインまたはを実行してマンページを参照してくださいman xsel
。
-i
パラメータが伝えxsel
標準入力から読み取るように(通常は、この手段のキーボード入力が、私たちはここにリダイレクト何かになるだろう)-b
パラメーターは、Xの「プライマリ」または「セカンダリ」選択の代わりにクリップボードを使用することを指定します。<<<
「Here String」と呼ばれる特別なBash構文です。
基本的に、引数(1つだけ!)を展開し(評価しない!)、文字列としてコマンドの標準入力(標準入力)にリダイレクトします。
!!:q
bashで履歴を展開するための「bangコマンド」と呼ばれます。それは、以前に入力されたコマンドラインで自分自身を置き換えます。
詳細については、実行してローカルのマンページを読んでくださいman history
(オンラインのマンページは役に立ちません)。
!!
前のコマンドラインを意味し、同義語です!-1
。!-2
に、最後から2番目のコマンドラインを意味します。マイナス記号を忘れないでください-
。そうしないと、入力した2番目(3番目/ ...)のコマンドが返されます。:q
バングコマンドを変更し、単一引用符(に置換を囲むようにbashのに指示'
)シェルによってさらなる拡張を防止します。echo !!:q | xsel -ib
echo
すべての引数を端末の標準出力に出力するという単純な仕事があります。
!!:q
bashで履歴を展開するための「bangコマンド」と呼ばれます。それは、以前に入力されたコマンドラインで自分自身を置き換えます。
!!
前のコマンドラインを意味し、同義語です!-1
。明らか!-2
に、最後から2番目のコマンドラインを意味します。マイナス記号を忘れないでください-
。そうしないと、入力した2番目(3番目/ ...)のコマンドが返されます。:q
バングコマンドを変更し、単一引用符(に置換を囲むようにbashのに指示'
)シェルによってさらなる拡張を防止します。|
パイプです。前のコマンドの端末出力( "stdout")を、その後のコマンドの端末入力( "stdin")にリダイレクトします。
xsel
Xクリップボードにアクセスするためのコマンドラインツールです。
詳細については、オンラインまたはを実行してマンページを参照してくださいman xsel
。
-i
パラメータが伝えxsel
標準入力から読み取るように(通常は、この手段のキーボード入力が、私たちはここにリダイレクト何かになるだろう)-b
パラメーターは、Xの「プライマリ」または「セカンダリ」選択の代わりにクリップボードを使用することを指定します。bashエイリアスは、頻繁に使用する長いコマンドや複雑なコマンドを覚えたくない場合に便利です。このコマンドを単純なエイリアス名に割り当てることができます。これを実行するには、長いコマンドの代わりにこれを実行します。
残念ながら、bangコマンドは特別なBash機能であり、エイリアスが解決される前に展開されるため、上記のバリエーションの1つを単純にエイリアスすることはできません!!
。これは、パーツが機能しないためです。ただし、回避策があります。
エイリアスを設定するには、ターミナルで次の行を実行します。次の代わりに有効なBash変数名を選択できることに注意してくださいcopylastcommand
。
alias copylastcommand='history -p \!\! | xsel -ib'
ただし、これは現在のBashセッションでのみ持続します。つまり、ターミナルウィンドウを閉じた後、エイリアスは消えます。上記の行を~/.bashrc
ファイルの最後、または~/.bash_aliases
ファイルがある場合はファイルに追加することで、すべてのBashセッションで永続的にすることができます。
繰り返しますが、行の短い内訳:
alias name='command'
Bashでエイリアスを設定する構文です。command
あなたが実行するたびに実行されますname
今から。
history -p \!\!
以前に実行したコマンドラインを標準出力(標準出力)に出力します。-p
スイッチなしでは、印刷するだけでなく、コマンドを再度実行します。バックスラッシュ()で
前髪(!
)をエスケープする必要があることに注意してください。\
そうしないと、エイリアスを設定しようとするとbashがそれらを展開しますが、エイリアスにある必要があるため意味がありません。
繰り返しますが、2番目のbangを-n
などで置き換えることにより、[n]番目の最近のコマンドを指定することもできます\!-2
。
|
パイプです。コマンドの標準出力( "stdout")をその前のコマンドのターミナル標準( "stdin")にリダイレクトします。
xsel
Xクリップボードにアクセスするためのコマンドラインツールです。
詳細については、オンラインまたはを実行してマンページを参照してくださいman xsel
。
-i
パラメータが伝えxsel
標準入力から読み取るように(通常は、この手段のキーボード入力が、私たちはここにリダイレクト何かになるだろう)-b
パラメーターは、Xの「プライマリ」または「セカンダリ」選択の代わりにクリップボードを使用することを指定します。<<<
構造が再び呼び出される方法を思い出すために私の心を助けることができますか?そして、私<<<!!:q xsel -ib
は良いと思います(履歴バンコマンドに引用をさせる)、またはあなたは同意しませんか?
!!:q
、単一引用符('
)を使用します...
<<<"!!" xsel -ib
ます。はい、<<<!!:q xsel -ib
より良いです、それのために行きます。
xsel
興味深い構文を持っている
以下を使用できますxclip
。
some_command | xclip -selection c
だからあなたの場合:
youtube-dl .... | xclip -selection c
c
クリップボードの略です。
xclip
最初にインストールする必要がある場合があります。
sudo apt-get install xclip
編集:
入力したコマンド(出力ではなく)をクリップボードにコピーする場合は、Here文字列を使用できます。
xclip -selection c <<<"$(echo foobar)"
またはパイプ:
echo foobar | xclip -selection c
echo "command" | xclip -selection clipboard
...または、以下のスクリプトにし~/.bin
ますecho "$@" | xclip -selection clipboard
。「cpy」として保存すると、cpy youtube-dl stuff
実行されずにクリップボードにコピーされます。
echo "$@" | xclip -selection c && $@
、またはevalでより賢い何か...-
これzsh
を使用xclip
するためのスクリプトを作成しました。
#!/bin/zsh
export HISTFILE=~/.zsh_history
fc -R
fc -l | tail -n 2 | sed -n '1p' | sed 's/[0-9]* //' | xclip -selection c
このスクリプトは、シェル/ターミナルに入力された最後のコマンドをシステムのクリップボードにコピーします。通常のリモートサーバーでは機能しません。
このスクリプトを書くのに数分しかかからないと思っていましたが、zsh
履歴を処理する方法につまずいたため、動作させるのに驚くほど時間がかかりました。
このtail -n 2
最初のsed
スクリプトは、このスクリプト自体のコマンドが履歴に記録されているため、2行の履歴を取得して最後の行を削除するという事実に対処しています。
このスクリプトは機能し、一種の楽しいパズルでしたが、を使用してこれを行うためのよりシンプルな方法またはエレガントな方法があるかどうか、本当に興味がありzsh
ます。
!!
確かにここで役立つようです、ありがとう!
クリップボードマネージャーとして使用しています。
alias pbpaste='xclip -i -selection clipboard -o'
alias pbcopy='xclip -selection clipboard'
vimscratch='vim -c 'setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile'
クリップボードへの最後のコマンド
alias last2cb='fc -ln -1 | pbcopy'
クリップボードをvimスクラッチに
alias vcb='pbpaste | vimscratch -'
ZSH固有
# Copy the most recent command to the clipboard
function _pbcopy_last_command(){
fc -ln -1 | pbcopy
}
zle -N pbcopy-last-command _pbcopy_last_command
bindkey '^x^y' pbcopy-last-command
# Ctrl-x Ctrl-y to copy last command to the clipboard
# Edit content of clipboard on vim (scratch buffer)
function _edit_clipboard(){
pbpaste | vim -c 'setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile' -
}
zle -N edit-clipboard _edit_clipboard
bindkey '^x^v' edit-clipboard
# Ctrl-x Ctrl-v to edit clipboard on vim
# define function that retrieves and runs last command
function run-again {
# get previous history item
zle up-history
# confirm command
zle accept-line
}
# define run-again widget from function of the same name
zle -N run-again
bindkey '\er' run-again
# alt-r to run last command again
これらのアイデアは、独自のソリューションを作成するのに役立つと思います
<<<"!!" xsel -ib