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


104

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

Answers:


107

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


19
注意:尾部空格会破坏它!
Max Reeder

55

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

如果您想将网站/文本编辑器等中的多行粘贴到bash中,无论是每行命令,函数还是整个脚本……都以a开头,以a (结尾)和Enter,例如在以下示例中:

如果我有以下斑点

function hello {
    echo Hello!
}
hello

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

  1. 从...开始 (

  2. 粘贴文本,然后按Enter(使其变得漂亮)...

  3. 以a结尾)并按Enter

例:

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

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


4
最简单的方法IMO
Hobroker '17

1
@Toolkit可以按照您的描述进行操作,但是我提供的解决方案可以在更复杂的情况下使用(换行符,多个功能,整个脚本等)
TryTryAgain

1
这会在子shell中运行粘贴的命令,因此通常实际上并没有执行您想要的操作。您可以使用花括号而不是括号来强制它在当前shell中运行。但实际上,两者都不做。外壳可以应付。
Tripleee '18

33

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

如果要定义编辑器,只需为Ex编写即可。EDITOR=emacs -nwEDITOR=vi内部~/.bashrc


2
该技术是有用的,但要注意的是,编辑必须运行同步(如emacsvi做),并在保存并退出命令执行即刻
mklement0


13

在行周围添加括号。例:

$ (
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
)

2
请注意,就像括号一样(,括号{在上面的示例中也将起作用
GypsyCosmonaut



4

为了防止文本文件中出现一长串命令,我将复制片段保留如下:

echo a;\
echo b;\
echo c


0

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

有效使用iTerm上 查看更多iTerm提示


-1

尝试

out=$(cat)

然后粘贴您的行,然后按Ctrl-D(插入EOF字符)。直到Ctrl-D之前的所有输入都将重定向到cat的stdout。


试试这个:$ out=$(cat) && eval "$out"。在最后一行之后按Enter,然后按上述建议按CTRL + D。
Mohamed Bana'3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.