我正在将 shell 命令序列复制并粘贴到我的终端模拟器中,我对这种行为感到困惑。
- 当我粘贴单行时
ssh user@remote "echo foo"; echo baz
,计算机会执行我期望的操作。它运行 SSH 命令,然后在我完成 SSH 会话后回显某些内容。 - 但是,当我粘贴与多行命令相同的内容时,不会发生这种情况。
ssh user@remote "echo foo" 回声巴兹
我仍然得到 SSH 会话,但echo baz
完全消失了。没有命令运行。 - 至少,这似乎与 SSH 有关。因为用其他东西替换 SSH 会产生我实际期望的行为。当我粘贴这个时,这两个命令都会运行,例如:
回声富 回声巴兹
那么发生了什么?粘贴的输入去哪里了?为什么 echo 命令没有被任何东西执行?这与 SSH 有什么关系?
(顺便说一句:我知道Ctrl+ X,Ctrl+E方法,但有时,尤其是在 Windows 上使用终端仿真器时,这不会开箱即用。)
尝试粘贴:
您将看到服务器上的
>>echo bar<<
输出。echo
这意味着
ssh
它将在其标准输入上吃掉粘贴的数据,就好像你已经完成了一样除了从不将 shell 命令粘贴到终端来运行它们之外,解决此问题的方法是使用
ssh -n
,它将重定向/dev/null
到ssh
:不幸的是我不知道粘贴的机制,所以我不能说为什么粘贴的数据最终会出现在标准输入流上
ssh
,但我猜这与从交互式继承的流有关shell(从标准输入读取命令)。使用
ssh -n
也是问题的解决方案(或至少是解决方案)在这里,循环只会运行一次,因为
ssh
从inputfile
.