Мне нужно вставить многострочный код bash в терминал, но всякий раз, когда я это делаю, каждая строка запускается как отдельная команда, как только она вставляется.
Как вставить многострочные коды bash в терминал и запустить все сразу?
Ответы (11)
Попробуйте поставить \
в конце каждой строки перед ее копированием.
Пример:
echo "Hello world" && \
script_b.sh
echo $?
Код выхода ($?
) теперь представляет собой полную последовательность команд, а не только последнюю команду.
Я действительно удивлен, что этот ответ не предлагается здесь, я искал решение этого вопроса, и я думаю, что это самый простой подход и более гибкий/прощающий...
Если вы хотите вставить несколько строк с веб-сайта/текстового редактора/и т. д. в bash, независимо от того, будут ли это команды на строку, функцию или весь скрипт... просто начните с (
и закончите )
и нажмите Enter , как в следующем примере:
Если бы у меня была следующая капля
function hello {
echo Hello!
}
hello
Вы можете вставить и проверить в терминале с помощью bash:
Начиная с
(
Вставка текста и нажатие Enter (чтобы было красиво)... или нет
Конец с
)
и нажатие Enter
Пример:
imac:~ home$ ( function hello {
> echo Hello!
> }
> hello
> )
Hello!
imac:~ home$
Вставленный текст автоматически получает продолжение с добавлением >
перед каждой строкой. Я тестировал несколько строк с командами в строке, функциями и целыми сценариями. Надеюсь, это поможет другим сэкономить время!
Если вы нажмете команду C-x C-e
, которая откроет ваш редактор по умолчанию, который определил .bashrc
, после этого вы сможете использовать все мощные функции вашего редактора. Когда вы сохраните и выйдете, строки будут ждать вашего входа.
Если вы хотите определить свой редактор, просто напишите для Ex. EDITOR=emacs -nw
или EDITOR=vi
внутри ~/.bashrc
emacs
и vi
), а при сохранении и выходе команды выполняются мгновенно.
- person mklement0; 02.04.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
)
(
, фигурные скобки {
также будут работать так же в приведенном выше примере.
- person GypsyCosmonaut; 16.07.2017
Другая возможность:
bash << EOF
echo "Hello"
echo "World"
EOF
Чтобы избежать длинной строки команд в текстовом файле, я храню свои фрагменты копирования и вставки следующим образом:
echo a;\
echo b;\
echo c
iTerm отлично обрабатывает многострочные команды, он сохраняет многострочные команды как одну команду, после чего мы можем использовать Cmd
+ Shift
+ ;
для навигации по истории.
Ознакомьтесь с дополнительными советами по iTerm на странице Эффективная работа с iTerm
Попробуйте так:
echo $(
cmd1
cmd2
...
)
В моей оболочке установлены привязки клавиш vi
. Я не помню, навскидку, как я это настроил. Но при вводе команды я могу переключиться из режима редактирования в командный режим, ввести v
и команда автоматически появится в сеансе vim
. Выход из сеанса (:wq
) отправляет команду bash
для выполнения.
Пытаться
out=$(cat)
Затем вставьте свои строки и нажмите Ctrl-D (вставьте символ EOF). Весь ввод до Ctrl-D будет перенаправлен на стандартный вывод кота.
$ out=$(cat) && eval "$out"
. нажмите Enter после последней строки, затем CTRL+D, как было предложено выше.
- person Mohamed Bana; 10.03.2017