sudoコマンドの後、クリップボードから複数のコマンドを貼り付けると中断されます。

sudoコマンドの後、クリップボードから複数のコマンドを貼り付けると中断されます。

SSH経由で接続するCentOSシステムは2つあります。そのうちの1つでは、クリップボードの複数のコマンドを貼り付けると、sudoコマンドがないと、そのコマンドはすべて実行されます。そうであれば、そのタスクを実行して他のすべてのコマンドをスキップします。例えば。 :

$ echo aa
sudo echo bb
echo cc

結果:

aa
bb

どんなsudoコマンドが出ても、前後にいくつのコマンドが出ても構いません。に設定されてbind -vいますenable-bracketed-pasteoff

他の例:

$ sudo echo dd ;\
echo ee
echo ff

結果:

dd
ee

他のCentOSではこれは起こりません。なぜこれが起こるのか、そして貼り付けたコマンドを修正せずに問題を解決する方法は何ですか?

編集するksh:そのようなことは起こらないことを理解してください。テストする他のシェルをインストールすることはできません。

ベストアンサー1

これは意図しない標準入力消費事例のように見えます。

対話型セッションに貼り付けるすべての項目は、その時点でフォアグラウンドで実行されるコマンドで使用できる標準入力データであり、通常は速度(または速度)に関係なく順番に実行できるすべてのコマンドで共有(および使用可能)されます。入力/貼り付けも可能です。各コマンドには、実行時に使用可能な標準入力データの一部または全部を使用する機会があります。

sudo実際に積極的に実行されるコマンドの1つです。食事後 みんな標準入力もし特に、企業環境ではセキュリティ上の理由からこれを行うように構成されています。この場合、sudo貼り付けたテキスト(後続のコマンドなど)が使用されます。

/etc/sudoers*この動作が発生しているホスト上のファイルを表示できる場合は、そのファイルにまたは(またはその両方)の行設定があるかどうかを確認するか、アカウントまたはグループにすることも、Defaults正確なコマンドを実行しているだけです。実際にシステム管理者がそうすると、実際には別のシステム全体のプラグインが設定されている可能性があります(可能性は低いが可能です)。use_ptylog_inputALLsudo/etc/sudo.conf


とにかく貼り付けた内容をサブシェルに簡単にラップすると、問題を解決できます。

(使用しているシェルの一般的なプロンプトで開く括弧を入力してを押しますEnter。 「PS2」(「追加入力が必要」とも呼ばれる)のプロンプトが表示されます。このプロンプトでは、通常、> 必要に応じてコマンドを入力するか、クリップボードにそのまま貼り付けることができます。これらのコマンドはすぐには実行されませんが、明示的に終了するまで開く括弧で始まるサブシェルに「待機」されます。入力/貼り付けが完了したら、閉じ)括弧を入力して再入力して完了すると、Enterサブシェルは終了します。

sudoその後、貼り付けられたコマンドは通常の(または特別な)動作で標準入力を消費する可能性があるこれらの(または他の)コマンドによって「食べられずに」最終的に実行されます。これは、関連するすべての標準入力(たとえば、貼り付け)がすでに「キューにある」サブシェルによって消費されているため、sudo「食べる」ものが何も残っていないためです。


最後にあなたの場合enable-bracketed-paste on 会議bashこれが本質的に検出するので友達になってください貼り付けたテキストを組み合わせてタイプされたターミナルエミュレータのサポートを受けるテキスト(ターミナルエミュレータがその機能を提供する場合)

「正しく」動作しているように見える理由についてはksh内部を詳しく調べていませんが、一見すると次のような内容をstrace読んでいるようです。バッファサイズ標準入力は、一般的な単純化された方法で標準入力を読み取って実行するのではなく、順番に実行される個々のコマンドとして表示できます。

完全にscreen無視するということを言えばenable-bracketed-paste on、自分自身も熱心なユーザーではないが、screenこう言うことができます。これは明らかに非常に「豊富な」端末ソフトウェアであり、おそらく行動bashターミナルエミュレータ自体なので、角かっこ貼り付け機能のためにターミナルエミュレータに送受信されたエスケープコードを妨げる(無視して削除することができます)。

おすすめ記事