如何将多个 Bash 命令粘贴到 shell 中而不丢失一些?

Ste*_*ett 6 ssh bash shell macos

复制粘贴您在网站上找到的一系列 Bash 命令是很好的。但是根据命令,有时您会丢失一些。也许他们被从标准输入读取的程序吞没了,或者也许有另一种解释。

所以我有时会这样做:

$ bash <<EOF
cmd2
...
EOF
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?一些 Bash 选项?SSH 选项?(我的设置是在 Ubuntu 服务器上运行的 Bash,我从标准 OS X 终端通过 SSH 连接到该服务器。不确定其中有多少相关。)

编辑

例子

为了响应对具体示例的请求,这里有一个。我将以下四行粘贴到一个 SSH shell(来自我的 Snow Leopard 桌面)中,该 shell 连接到一个在 OpenStack VM 上运行的股票 Ubuntu Quantal,在 Bash shell 中。

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
Run Code Online (Sandbox Code Playgroud)

前两个命令执行(成功),而后两个命令显然从未被服务器接收(或者至少从未被 Bash 处理)。

Lri*_*Lri 5

你也可以使用类似的东西pbpaste | bash。并且edit-and-execute-command( \C-x\C-e) 也适用于多个命令。

如果某些命令需要 root 权限,您可以使用sudo -v5 分钟来验证时间戳。

  • 啊,那个编辑当前行的技巧有效。(Ctrl-x、Ctrl-E 或 ^X^E 其他符号)。 (2认同)

Ken*_*ter 3

一个快速但肮脏的解决方案是运行以​​下命令:

bash -c '<paste commands here>'
Run Code Online (Sandbox Code Playgroud)

即使粘贴包含换行符,此方法也有效。如果粘贴包含单引号,则可能会失败。如果您了解bash 引用规则,您应该能够针对您尝试运行的特定命令修改此方法。