繁体   English   中英

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

[英]How do I paste multi-line bash codes into terminal and run it all at once?

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

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

例子:

echo "Hello world" && \
script_b.sh

echo $?

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

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

如果您想将网站/文本编辑器/等中的多行粘贴到 bash 中,无论是每行命令还是 function 或整个脚本...只需以(并以)开头并输入,如以下示例中所示:

如果我有以下 blob

function hello {
    echo Hello!
}
hello

您可以使用 bash 在终端中粘贴和验证:

  1. (

  2. 粘贴您的文本,然后按 Enter (使其漂亮)...或不

  3. )结尾并按 Enter

例子:

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

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

如果您按Cx Ce命令将打开定义.bashrc的默认编辑器,之后您可以使用编辑器的所有强大功能。 当您保存并退出时,线路将等待您的输入。

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

除了反斜杠,如果一行以|结尾&&|| ,它将在下一行继续。

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

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

另一种可能:

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

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

echo a;\
echo b;\
echo c

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

有效地使用 iTerm中查看更多 iTerm 提示

所以我认为对于很长的命令(即用 llvm 编译文件),这让我比过去尝试过的其他命令更轻松:我一直使用它在一个编辑器中通过多个命令来敲定一个命令线路:

cat | paste -sd " "  - | xargs echo

这将在终端中打开 cat 标准输入,粘贴代码并按 ctrl-d 跟进(之前提到添加一个 EOF 字符并结束 CAT 进程)。 Paste 接受 cat 输入并将所有多行收集到一个空格字符中。 这只会回显命令。

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

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

或者我喜欢将 output 作为别名命令,放在 .zshrc 中

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

试试这个方法:

echo $( 
    cmd1
    cmd2
    ...
)

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

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

尝试

out=$(cat)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM