如何在向终端发出一个请求(不使用文件)的情况下依次执行多个命令?


22

我可以(1)使用以命令行分隔的键入命令来准备文件,(2)使它可执行,(3)从文件系统管理器或终端运行它。

但这对于不可重复的命令以及每次其他命令集都是荒谬的。

我可以在一个请求中向终端输入这些命令吗?

我不知道终端的终端字符-Ctrl,Shift或Alt与Enter键不起作用。  


1
在命令行上,命令可以用分号分隔。
John1024

Answers:


27

您可以使用&&或分隔命令;

  • && 仅当前一个以状态0退出(成功)时,才运行下一个命令:

    command1 && command2 && command3
    
  • ; 运行每个命令,即使前一个以非零状态退出:

    command1; command2; command3
    

您可以根据需要组合这些分隔符。


6
command1 && command2仅当command1成功时,才会执行for command2。
souravc


@souravc:我进行了编辑,谢谢,我学到了一些东西。
MrVaykadji'2

如果与sudo apt upgrade和结合使用sudo systemctl reboot,您是否需要两次添加“ sudo”,还是第二个命令“记住” sudo?
科恩

9

如果您希望在单个请求中在自己的行上键入每个命令,则可以使用以下方法:

  • if :; then(表示:如果为true,则执行)开始您的请求(第一行),然后按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如果需要,阅读起来可能更清晰。乍一看:可能会感到困惑;
kiri 2014年

4

首先,将其{放在自己的行上。
然后,插入您的命令。
然后,将a }放在新行上,然后按Enter。您的命令将被执行。

例:

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

它将打印(一次打印,中间没有提示):

list
of
commands
to run at once

附带说明一下,{ .. }是Bash命令分组语法。通常与&&or 结合使用||(分别与'and'和'or' 结合使用)


if :; then已经提到的一样吗?还是略有不同?
MrVaykadji'2

1
@MrVaykadji结果相同,但方法不同。if :在null命令上运行测试,该命令将始终返回true。{ .. }只是将命令分组在一起。我个人觉得{ .. }更容易记住。
kiri 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.