複数のBashコマンドをいくつか失わずにシェルに貼り付ける方法は?


6

Webサイトで見つけた一連のBashコマンドをコピーして貼り付けると便利です。しかし、コマンドによっては、いくつかを失うこともあります。たぶん、標準入力から読み取るプログラムに飲み込まれたり、別の説明があるかもしれません。

だから私は時々これを行うことになります:

$ bash <<EOF
cmd2
...
EOF

もっと良い方法はありますか?いくつかのBashオプション?SSHオプション?(私のセットアップは、Ubuntuサーバーで実行されているBashであり、標準のOS X端末からSSHで接続されています。どれだけ関連があるかはわかりません。)

編集

具体的な例のリクエストに応えて、ここに一つあります。Bashシェルで、OpenStack VMで実行されている標準のUbuntu Quantalに接続されたSSHシェル(Snow Leopardデスクトップから)に次の4行を貼り付けました。

sudo apt-get install -y r-base gdebi-core
sudo apt-get install -y libapparmor1 # Required only for Ubuntu, not Debian
wget http://download2.rstudio.org/rstudio-server-0.97.314-amd64.deb
sudo gdebi rstudio-server-0.97.314-amd64.deb

最初の2つのコマンドは(正常に)実行されましたが、最後の2つは明らかにサーバーによって受信されなかった(または少なくとも、Bashによって処理されなかった)。


1
失敗する具体的な例はありますか?
slhck

第通常、長時間実行されるコマンドのようなapt-get updategit clonewgetなど
スティーブ・ベネット

1
問題:一連のコマンドをシェルに貼り付けて実行するための便利で堅牢なメカニズムが必要であり、端末自体の気まぐれに依存しません。
スティーブベネット

1
ここではOTですが、それでも面白いです。:少なくとも私は、あなたは時々あなたがコピーと期待するものを手に入れる&ウェブサイトから貼り付けられませんので、本当に驚いたh-online.com/open/news/item/...
MPY

2
これは「Find me a rock」(「いいえ、大きすぎます。」;「いいえ、小さすぎます。」;「そうではありません。色が好きではありません。」)問題の説明により、推測が減り、関連性の高い回答が得られます。
JRobert

回答:


3

迅速で汚い解決策はこれを実行することです:

bash -c '<paste commands here>'

これは、貼り付けに改行文字が含まれている場合でも機能します。貼り付けに単一引用符が含まれていると失敗する場合があります。bashの引用ルールを知っている場合は、実行しようとしている特定のコマンドに合わせてこのメソッドを変更できるはずです。


それは素晴らしいです-コマンドラインに改行を入れることができるとは思いもしませんでした。
スティーブベネット

5

のようなものを使用することもできますpbpaste | bash。また、edit-and-execute-command\C-x\C-e)は複数のコマンドでも機能します。

一部のコマンドにルート権限が必要な場合はsudo -v、5分間のタイムスタンプを検証するために使用できます。


OPはUbuntuサーバーにSSHで接続pbpasteするため、そこへのing bashは簡単に実行できません。
slhck

2
ああ、その編集現在行のトリックは機能します。(他の表記法ではCtrl-x、Ctrl-Eまたは^ X ^ E)。
スティーブベネット

かなりの数のキーストロークです。Ctrl+ X、Ctrl + E、Cmd-V、Ctrl + X、Y、<enter>
スティーブベネット


キーストロークは、他のエディタのために異なっている); @SteveBennettはあなたの$ VISUALエディタがナノであるように見える
törzsmókus

1

適切な名前を付けたお気に入りのテキストエディターにこのようなカットアンドペーストを作成し、余分な文字を注意深く探して、実行する予定のものを実行していることを確認します。私は、コードスニペットをインタラクティブシェルにカットアンドペーストすることに強く反対しています。カットアンドペースト操作によってどのような追加コマンドが取得されるかを誰が知っているのでしょうか。

テキストファイルに検証済みのコマンドが保存されると、組み込みコマンドで実行できます

source <filename>


さて、クリップボードの内容がまさにあなたが実行したいものであることに納得したら?
スティーブベネット

オリジナルが更新されました。保存したファイルで、「source <filename>」を使用して、実行可能にすることなく、内部のステートメントを実行します。
ネビンウィリアムズ

そして今、あなたは二度と走らないスクリプトファイルを持っています。それはかなり不器用です。
スティーブベネット

それを削除すると、もう表示されなくなります。
新武蔵

1
うん。元の<< EOFメソッドよりも扱いにくい方法。
スティーブベネット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.