复制粘贴您在网站上找到的一系列 Bash 命令很不错。但根据命令的不同,有时您会丢失一些命令。也许它们被从标准输入读取的程序吞没了,或者也许有其他解释。
因此我有时会这样做:
$ bash <<EOF
cmd2
...
EOF
有没有更好的方法?一些 Bash 选项?SSH 选项?(我的设置是在 Ubuntu 服务器上运行的 Bash,我通过标准 OS X 终端通过 SSH 连接到该服务器。不确定这有多少相关性。)
编辑
例子
为了响应对具体示例的要求,这里举一个例子。我将以下四行粘贴到连接到 OpenStack VM 上运行的普通 Ubuntu Quantal 的 SSH shell(来自我的 Snow Leopard 桌面)的 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
前两个命令已执行(成功),但后两个命令显然从未被服务器接收(或至少从未被 Bash 处理)。
答案1
一个快速而肮脏的解决方案是运行这个:
bash -c '<paste commands here>'
即使粘贴的内容包含换行符,此方法也有效。如果粘贴的内容包含单引号,则可能会失败。如果您知道bash 引用规则,您应该能够根据您尝试运行的特定命令修改此方法。
答案2
您还可以使用类似pbpaste | bash
. 并且edit-and-execute-command
( \C-x\C-e
) 也适用于多个命令。
如果某些命令需要root权限,您可以使用sudo -v
5分钟来验证时间戳。
答案3
我会将此类剪切和粘贴操作放入我最喜欢的文本编辑器中,并为其取一个合适的名字,然后我就可以仔细查找多余的字符,并确保运行我期望运行的内容。我强烈反对将代码片段剪切并粘贴到交互式 shell 中:谁知道剪切和粘贴操作可能会拾取哪些额外的命令?
一旦文本文件保存了经过验证的命令,就可以使用内置命令执行它们
source <filename>