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

时间秒杀一切 提交于 2019-11-29 20:22:43
opsguy

Try putting \ at the end of each line before copying it.

I'm really surprised this answer isn't offered here, I was in search of a solution to this question and I think this is the easiest approach, and more flexible/forgiving...

If you'd like to paste multiple lines from a website/test editor/etc, into bash, regardless of whether it's commands per line or a function or entire script...simply start with a ( and end with a ) and Enter, like in the following example:

If I had the following blob

function hello {
    echo Hello!
}
hello

You can paste and verify in a terminal using bash by:

1) Starting with (

2) Pasting your text, and pressing Enter (to make it pretty)...or not

3) Ending with a ) and pressing Enter

Example:

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

The pasted text automatically gets continued with a prepending > for each line. I've tested with multiple lines with commands per line, functions and entire scripts. Hope this helps others save some time!

itirazimvar

If you press C-x C-e command that will open your default editor which defined .bashrc, after that you can use all powerful features of your editor. When you save and exit, the lines will wait your enter.

If you want to define your editor, just write for Ex. EDITOR=emacs -nw or EDITOR=vi inside of ~/.bashrc

In addition to backslash, if a line ends with | or && or ||, it will be continued on the next line.

Add parenthesis around the lines. Example:

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

Another possibility:

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

To prevent a long line of commands in a text file, I keep my copy-pase snippets like this:

echo a;\
echo b;\
echo c

Try this way:

echo $( 
    cmd1
    cmd2
    ...
)

iTerm handles multiple-line command perfectly, it saves multiple-lines command as one command, then we can use Cmd+Shift+; to navigate the history. Check more iTerm tips at Working effectively with iTerm

Try

out=$(cat)

Then paste your lines and press Ctrl-D (insert EOF character). All input till Ctrl-D will be redirected to cat's stdout.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!