Как вставить многострочные коды Bash в терминал и запустить все сразу? - PullRequest
71 голосов
/ 16 июля 2011

Мне нужно вставить многострочный bash-код в терминал, но всякий раз, когда я это делаю, каждая строка запускается как отдельная команда, как только она вставляется.

Ответы [ 10 ]

73 голосов
/ 16 июля 2011

Попробуйте поставить \ в конце каждой строки перед копированием.

29 голосов
/ 02 апреля 2017

Я действительно удивлен, что этот ответ здесь не предлагается, я искал решение этого вопроса, и я думаю, что это самый простой подход, более гибкий / прощающий ...

Если вы хотите вставить несколько строк из веб-сайта / тестового редактора / и т. Д. В bash, независимо от того, являются ли они командами на строку, или функцией, или целым скриптом ... просто начните с ( и заканчивайте a ) и Enter, как в следующем примере:

Если бы у меня был следующий блоб

function hello {
    echo Hello!
}
hello

Вы можете вставить и подтвердить в терминале, используя bash:

1) Начиная с (

2) Вставить текст и нажать Enter (чтобы сделать его красивым) ... или нет

3) Завершить с помощью ) и нажать Enter

Пример:

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

Вставленный текст автоматически продолжается с добавлением > для каждой строки. Я тестировал несколько строк с командами на строку, функциями и целыми сценариями. Надеюсь, это поможет другим сэкономить время!

25 голосов
/ 11 октября 2015

Если вы нажмете C-x C-e команду, которая откроет ваш редактор по умолчанию, который определил .bashrc, после этого вы сможете использовать все мощные функции вашего редактора. Когда вы сохраните и выйдете, строки будут ждать вашего ввода.

Если вы хотите определить свой редактор, просто напишите для Ex. EDITOR=emacs -nw или EDITOR=vi внутри ~/.bashrc

14 голосов
/ 16 июля 2011

Помимо обратной косой черты, если строка заканчивается на | или && или ||, она будет продолжена на следующей строке.

7 голосов
/ 02 мая 2017

Добавьте круглые скобки вокруг строк. Пример:

$ (
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
)
4 голосов
/ 15 октября 2018

Другая возможность:

bash << EOF
echo "Hello"
echo "World"
EOF
2 голосов
/ 14 мая 2014

Чтобы предотвратить длинную строку команд в текстовом файле, я сохраняю свои фрагменты copy-pase следующим образом:

echo a;\
echo b;\
echo c
0 голосов
/ 21 июня 2018

iTerm отлично обрабатывает многострочные команды, сохраняет многострочные команды как одну команду, затем мы можем использовать Cmd + Shift +; ориентироваться в истории. Ознакомьтесь с другими советами iTerm на Эффективная работа с iTerm

0 голосов
/ 09 февраля 2018

Попробуйте так:

echo $( 
    cmd1
    cmd2
    ...
)
0 голосов
/ 06 сентября 2015

Попробуйте

out=$(cat)

Затем вставьте строки и нажмите Ctrl-D (вставьте символ EOF).Весь ввод до Ctrl-D будет перенаправлен на стандартный вывод кота.

...