Як вставити багаторядкові баш-коди в термінал і запустити їх усі відразу?


104

Мені потрібно вставити багаторядковий код bash в термінал, але щоразу, коли я це роблю, кожен рядок запускається як окрема команда, як тільки він вставляється.

Відповіді:


107

Спробуйте вставити \кінець кожного рядка перед копіюванням.


19
Примітка: кінцеві пробіли порушать це!
Max Reeder,

55

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

Якщо ви хочете вставити кілька рядків з веб - сайту / текстового редактора / і ін., В Баш, незалежно від того, є чи команди це на лінії або функції або весь сценарій ... просто почати з (і закінчуватися )і Enter, як у наступному прикладі:

Якби я мав наступну крапку

function hello {
    echo Hello!
}
hello

Ви можете вставити та перевірити в термінал за допомогою bash, виконавши:

  1. Починаючи з (

  2. Вставлення тексту та натискання клавіші Enter (щоб зробити його гарним) ... чи ні

  3. Закінчуючи )клавішу a та натискаючи Enter

Приклад:

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

Вставлений текст автоматично продовжується з попереднім додаванням >до кожного рядка. Я тестував з кількома рядками з командами на рядок, функціями та цілими сценаріями. Сподіваюся, це допоможе іншим заощадити трохи часу!


4
найпростіший метод ІМО
Hobroker

1
@Toolkit для простих речей, які будуть працювати, як ви описали, але запропоноване мною рішення буде працювати в більш складних ситуаціях (розриви рядків, кілька функцій, цілі сценарії тощо)
TryTryAgain

1
Це запускає вставлені команди в підшелутці, тому часто насправді не робить те, що ви хочете. Ви можете використовувати фігурні дужки замість дужок, щоб змусити її працювати в поточній оболонці; але насправді, просто не роби жодного. Шкаралупа може впоратися.
триплі

33

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

Якщо ви хочете визначити свого редактора, просто напишіть для Ex. EDITOR=emacs -nwабо EDITOR=viвсередині~/.bashrc


2
Методика корисна, але зверніть увагу, що редактор повинен працювати синхронно (як emacsі viробити), а при збереженні та виході команди виконуються миттєво .
mklement0 02

16

На додаток до зворотної косої риски, якщо рядок закінчується |або &&або ||, він буде продовжений на наступному рядку.


13

Додайте дужки навколо рядків. Приклад:

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

2
Зверніть увагу, як парантез (, брекети {також працюють однаково у наведеному прикладі
GypsyCosmonaut



4

Щоб запобігти довгий рядок команд у текстовому файлі, я зберігаю свої фрагменти copy-pase таким чином:

echo a;\
echo b;\
echo c


0

iTerm чудово обробляє багаторядкову команду, зберігає багаторядкову команду як одну команду, тоді ми можемо використовувати Cmd+ Shift+ ;для навігації в історії.

Перегляньте більше порад iTerm у розділі Ефективна робота з iTerm


-1

Спробуйте

out=$(cat)

Потім вставте рядки та натисніть Ctrl-D (вставте символ EOF). Увесь вхід до Ctrl-D буде перенаправлено на кішку.


спробуйте це: $ out=$(cat) && eval "$out". натисніть Enter після останнього рядка, а потім CTRL + D, як було запропоновано вище.
Мохамед Бана
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.