如何将多行 bash 代码粘贴到终端并一次运行?

Posted

技术标签:

【中文标题】如何将多行 bash 代码粘贴到终端并一次运行?【英文标题】:How do I paste multi-line bash codes into terminal and run it all at once? 【发布时间】:2011-10-06 11:36:33 【问题描述】:

我需要将多行 bash 代码粘贴到终端中,但每当我这样做时,每行在粘贴后都会作为单独的命令运行。

【问题讨论】:

【参考方案1】:

在复制之前尝试将\ 放在每行的末尾。

例子:

echo "Hello world" && \
script_b.sh

echo $?

退出代码 ($?) 现在是完整的命令序列,而不仅仅是最后一个命令。

【讨论】:

注意:尾随空格会破坏它!【参考方案2】:

我真的很惊讶这里没有提供这个答案,我正在寻找这个问题的解决方案,我认为这是最简单的方法,而且更灵活/宽容......

如果您想将网站/文本编辑器/等中的多行粘贴到 bash 中,无论是每行命令还是函数还是整个脚本...只需以 ( 开头并结束使用) 并回车,如下例所示:

如果我有以下 blob

function hello 
    echo Hello!

hello

您可以通过以下方式在终端中使用 bash 粘贴和验证:

    (开头

    粘贴您的文本,然后按 Enter 键(使其美观)...或不粘贴

    ) 结尾并按 Enter 键

例子:

imac:~ home$ ( function hello 
>     echo Hello!
> 
> hello
> )
Hello!
imac:~ home$ 

粘贴的文本会自动继续,并在每一行前面加上 >。我已经用每行、函数和整个脚本的命令测试了多行。希望这可以帮助其他人节省一些时间!

【讨论】:

最简单的方法 IMO @Toolkit 对于简单的事情它会像你描述的那样工作,但我提供的解决方案将适用于更复杂的情况(换行符、多个函数、整个脚本等) 这会在子 shell 中运行粘贴的命令,因此它通常不会真正执行您想要的操作。您可以使用大括号代替圆括号来强制它在当前 shell 中运行;但实际上,也不要这样做。外壳可以应付。【参考方案3】:

如果您按下C-x C-e 命令将打开定义.bashrc 的默认编辑器,之后您可以使用编辑器的所有强大功能。当您保存并退出时,这些行将等待您的输入。

如果您想定义您的编辑器,只需为 Ex 编写。 EDITOR=emacs -nwEDITOR=vi~/.bashrc

【讨论】:

该技术很有用,但请注意编辑器必须同步运行(如emacsvi 所做的那样),并在保存和退出时执行命令立即.【参考方案4】:

另一种可能性:

bash << EOF
echo "Hello"
echo "World"
EOF

【讨论】:

我最喜欢的方法。另外,查看this answer 以了解使用 heredocs 时如何管道/重定向【参考方案5】:

除反斜杠外,如果一行以|&amp;&amp;|| 结尾,则会在下一行继续。

【讨论】:

【参考方案6】:

在行周围添加括号。示例:

$ (
sudo apt-get update
dokku apps
dokku ps:stop APP # repeat to shut down each running app
sudo apt-get install -qq -y dokku herokuish sshcommand plugn
dokku ps:rebuildall # rebuilds all applications
)

【讨论】:

请注意,像括号(,大括号 在上面的例子中也可以工作 这似乎重复了an earlier answer on this page【参考方案7】:

为了防止文本文件中出现长长的命令行,我将我的 copy-pase sn-ps 保留如下:

echo a;\
echo b;\
echo c

【讨论】:

这个答案似乎与接受的答案相同,只有 2 个而不是 3 个 (&&) 字符。为什么接受的答案如此可取?【参考方案8】:

iTerm 完美处理多行命令,它将多行命令保存为一个命令,然后我们可以使用Cmd+ Shift + ; 来浏览历史记录。

在Working effectively with iTerm 查看更多 iTerm 提示

【讨论】:

【参考方案9】:

试试这个方法:

echo $( 
    cmd1
    cmd2
    ...
)

【讨论】:

【参考方案10】:

我很惊讶没有人这么说,但是您可以使用 fc 将所有命令粘贴到编辑器中并立即运行它们

【讨论】:

【参考方案11】:

试试

out=$(cat)

然后粘贴您的行并按 Ctrl-D(插入 EOF 字符)。直到 Ctrl-D 的所有输入都将被重定向到 cat 的标准输出。

【讨论】:

试试这个:$ out=$(cat) &amp;&amp; eval "$out"。在最后一行之后按回车键,然后按上面的建议按 CTRL+D。【参考方案12】:

我在我的 shell 中设置了 vi 键绑定。我不记得我是如何配置它的。但是当输入命令时,我可以从编辑切换到命令模式,输入v 并在vim 会话中自动弹出命令。退出会话 (:wq) 将命令提交给bash 执行。

【讨论】:

以上是关于如何将多行 bash 代码粘贴到终端并一次运行?的主要内容,如果未能解决你的问题,请参考以下文章

如何粘贴到终端?

如何将多行文本粘贴到python输入中[重复]

如何将一长行代码粘贴到vs code mac中的多行[重复]

如何将多行 python 脚本粘贴到 ConEmu 中?

粘贴到 ssh 终端时,bash heredoc 被损坏(随机)[重复]

在 Bash 中将文本文件作为命令运行