Як виконати кілька команд одна за одною з одним запитом до терміналу (без використання файлу)?


22

Я міг би (1) підготувати файл із набраними командами, розділеними кінцевим рядком, (2) зробити його виконуваним, (3) запустити його з менеджера файлової системи чи терміналу.

Але це смішно для не повторюваних та кожного разу інших наборів команд.

Чи можу я ввести ці команди на термінал в одному запиті?

Я не знаю символу кінцевої лінії для терміналу - Ctrl, Shift або Alt з Enter не працюють.  


1
У командному рядку команди можна розділити крапкою з комою.
John1024

Відповіді:


27

Можна розділити команди за допомогою &&або ;.

  • && Наступна команда виконує лише, якщо попередня вийшла зі статусом 0 (була успішною):

    command1 && command2 && command3
    
  • ; запускає всі команди, навіть якщо попередня закінчується з ненульовим статусом:

    command1; command2; command3
    

Ви можете комбінувати ці роздільники за своїм бажанням.


6
для command1 && command2command2 буде виконуватися лише у випадку успіху command1.
souravc

Гарне обговорення, відповідні / аналогічні посади: askubuntu.com/questions/334994 / ... stackoverflow.com/questions/13077241 / ...
gevang

@souravc: Я зробив редагування, спасибі, щось дізнався.
MrVaykadji

якщо поєднувати sudo apt upgradeі sudo systemctl reboot, чи потрібно вам два рази додати «sudo», чи буде «запам'ятати» sudo для другої команди?
Коен

9

Якщо ви зацікавлені ввести кожну команду в своєму рядку в одному запиті, ви можете використовувати наступний метод:

  • Почніть запит (перший рядок) з if :; then(це означає: якщо істинно, то зробіть) і натисніть Enter; ваше запит зараз зміниться, >і нічого не буде виконано.

  • Введіть ваші команди, кожна з яких слідує Enter

  • Завершіть запит за допомогою fi(закінчення вищевказаної ifумови) і натисніть Enter. Тепер всі ваші команди будуть виконані в заданому порядку.

Приклад:

radu@Radu: ~ $ if :; then
> echo 'something'
> echo 'something else'
> echo 'List current directory contents:'
> ls
> echo 'Change current directory with root directory:'
> cd
> #finish
> fi
something
something else
List current directory contents:
Backups            Desktop           forma3d  Public      Untitled txt.txt~
bin                Documente         Music    Templates   Videos
configuration.php  examples.desktop  passwd~  tmp~
Downloads          file~             Poze     Ubuntu One
Change current directory with root directory:
radu@Radu: / $

if true; thenза бажанням може бути зрозумілішим для читання. :може плутати з ;першого погляду.
кірі

4

По-перше, покладіть {на свій власний рядок.
Потім вставте свої команди.
Потім поставте }нову лінію і натисніть Enter. Ваші команди будуть виконані.

Приклад:

{
echo list
echo of
echo commands
echo to run at once
}

який буде надруковано (все відразу, без підказки між ними):

list
of
commands
to run at once

Як бічна примітка { .. }- синтаксис групування команд Bash. Це часто корисно в поєднанні з &&або ||("і" і "або" відповідно)


Це те саме, що if :; thenвже згадувалося? Або це трохи інакше?
MrVaykadji

1
@MrVaykadji Це той самий результат, але інший метод. if :запускає тест на команду null, яка завжди поверне true. { .. }просто групуйте команди разом. Мені особисто { .. }легше запам'ятати.
кірі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.