如何将多行 bash 代码粘贴到终端并同时运行它?

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

144043 次浏览

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

例如:

echo "Hello world" && \
script_b.sh


echo $?

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

除了反斜杠之外,如果一行以 |&&||结束,那么它将在下一行继续。

为了防止文本文件中出现长长的命令行,我保留了以下复制阶段的代码片段:

echo a;\
echo b;\
echo c

试试看

out=$(cat)

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

如果您按下 C-x C-e命令,将打开定义了 .bashrc的默认编辑器,然后您可以使用编辑器的所有强大功能。当您保存和退出时,线路将等待您的进入。

如果你想定义你的编辑器,只需要在 ~/.bashrc中写入 EX.EDITOR=emacs -nwEDITOR=vi

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

如果你想从网站/文本编辑器等粘贴多行命令到 bash 中,不管是每行命令、函数命令还是整个脚本命令... ... 只需以 (开始,以 )和 Enter 结束,就像下面的例子:

如果我有下面这团

function hello {
echo Hello!
}
hello

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

  1. (开始

  2. 粘贴您的文本,并按 Enter (使其更美观) ... 或不

  3. )结束并按 Enter

例如:

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

粘贴的文本将自动为每一行添加一个前置的 >。我已经测试了多行,每行都有命令、函数和整个脚本。希望这能帮助别人节省一些时间!

在两行之间加上括号。例如:

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

试试这样:

echo $(
cmd1
cmd2
...
)

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

查看更多关于 iTerm 的技巧,请点击: http://liflongProgrammer.blogspot.com/2018/06/Working-effect-with-iTerm.html rel = “ nofollow noReferrer”> 使用 iTerm 有效地工作

另一种可能性是:

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

我在 shell 中设置了 vi密钥绑定。我一下子想不起来我是怎么配置这个的。但是,当输入一个命令时,我可以从编辑切换到命令模式,键入 v并让命令自动弹出在 vim会话。退出会话(:wq)将命令提交给 bash执行。

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

因此,我认为命令应该非常长(即用 llvm 编译文件!)这让我觉得我们比以前试过的其他人都轻松。我一直使用它在编辑器中通过多行研究出一个命令:

cat | paste -sd " "  - | xargs echo

这将在终端中打开 CAT 标准输入,粘贴代码,然后使用 ctrl-d 进行后续操作(在此之前提到过添加一个 EOF char 并结束 CAT 进程)。粘贴接受 cat 输入,并将所有多行代码放入一个空格字符中。这只会重复执行命令。

要执行该命令,只需将 sh 添加到末尾:

cat | paste -sd " "  - | xargs echo | sh

或者,我喜欢将输出作为别名命令,放在.zhrc 中

alias mcmd='cat | paste -sd " "  - | xargs echo'

然后执行

> mcmd | sh

这将打开 cat,粘贴多行命令 ctrl d,并将多行命令作为一行命令执行:)

示例命令

>    mcmd;
# now paste in your long command
> llvm-g++
main.mm
-o
buildApp
-w
-g
-std=c++14
-L/System/Library/Frameworks/
-framework
CoreServices
# now key press ctrl + d

单线输出

 llvm-g++ main.mm -o buildApp -w -g -std=c++14 -L/System/Library/Frameworks/ -framework CoreServices