it-roy-ru.com

Как вставить многострочные коды Bash в терминал и запустить все сразу?

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

57
Nathan

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

62
opsguy

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

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

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

function hello {
    echo Hello!
}
hello

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

1) Начиная с ( 

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

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

Пример:

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

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

22
TryTryAgain

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

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

19
itirazimvar

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

11
glenn jackman

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

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

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

echo a;\
echo b;\
echo c
2
nvd

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

bash << EOF
echo "Hello"
echo "World"
EOF
1
Lenar Hoyt

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

0
jeffery.yuan

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

echo $( 
    cmd1
    cmd2
    ...
)
0
voltento