执行在一行中组合多个linux命令

时间:2012-10-25 21:02:47

标签: linux command-line

我试图在一行中合并多个linux命令来执行部署操作。 例如

cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install

10 个答案:

答案 0 :(得分:671)

如果只想在前一个命令成功的情况下执行每个命令,请使用&&运算符组合它们:

cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install

如果其中一个命令失败,则不会执行其后的所有其他命令。

如果要执行所有命令而不管先前的命令是否失败,请用分号分隔:

cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install

在你的情况下,我认为你想要第一种情况,即执行下一个命令取决于前一个命令的成功。

您还可以将所有命令放在脚本中并执行该命令:

#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install

(行末尾的反斜杠是为了防止shell认为下一行是新命令;如果省略反斜杠,则需要在一行中编写整个命令。)< / p>

将其保存到文件中,例如myscript,并使其可执行:

chmod +x myscript

您现在可以像机器上的其他程序一样执行该脚本。但是,如果您不将其放在PATH环境变量中列出的目录(例如/usr/local/bin或某些Linux发行版~/bin)中,那么您需要指定路径到那个剧本。如果它在当前目录中,则使用以下命令执行:

./myscript

脚本中的命令与第一个示例中的命令的工作方式相同;如果前一个命令成功,则仅执行下一个命令。要无条件执行所有命令,只需在各自的行中列出每个命令:

#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install

答案 1 :(得分:42)

我发现使用;分离命令只能在前台工作。例如:

cmd1; cmd2; cmd3 & - 只会在后台执行cmd3,而 cmd1 && cmd2 && cmd3 & - 如果没有错误,将在后台执行整个链。

为了满足无条件执行,使用括号解决了这个问题:

(cmd1; cmd2; cmd3) & - 将在后台执行命令链,即使任何步骤失败。

答案 2 :(得分:10)

您可以使用分号分隔命令:

cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install

这是你的意思吗?

答案 3 :(得分:2)

如果要执行所有命令,无论是否执行上一个命令,都可以使用分号(;)分隔命令。

cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install

如果只想在上一个命令成功时执行下一个命令,那么你可以使用&amp;&amp;分开命令。

cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install

在你的情况下,连续命令的执行似乎取决于以前的命令,所以使用第二个例子,即使用&amp;&amp;加入命令。

答案 4 :(得分:2)

要一次性运行它们,您可以使用管道线键&#34; |&#34;像这样:

package mainpackages;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JPanel;

public class Screen extends JPanel {
    public static int x = 100;
    public static int y = 100;
    public static int deltax = 5;
    public static int deltay = 5;
    public Screen() {


    }


    public void paint(Graphics g) { 
        g.setColor(Color.RED);
        g.fillRect(x, y, 50, 50); 
    }



}

答案 5 :(得分:1)

cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install

答案 6 :(得分:0)

只有一个&符号的用途是什么? 今天早上,我在XFCE小组(Manjaro + XFCE)中发布了一个启动器,同时启动了2个密码管理器:

sh -c "keepassx && password-gorilla"
or
sh -c "keepassx; password-gorilla"

但它不能按我的意愿行事。 I.E.,第一个应用程序启动但第二个应用程序仅在前一个应用程序关闭时启动: - /

然而,我发现(只有一个&符号):

sh -c "keepassx & password-gorilla"

它现在可以正常运作......

答案 7 :(得分:-1)

您可以使用以下代码;

$args = array('post_type' => 'post_type_slug', 'category_name' => 'category_slug_name', 'posts_per_page' => 10, 'orderby' => 'title', 'order' => 'ASC');
$query = new WP_Query($args);

它有效......

答案 8 :(得分:-1)

对于这种误导性的问题,我找到了很多答案

从此帖子修改: https://www.webmasterworld.com/linux/3613813.htm

以下代码将创建bash窗口,并且与bash窗口完全一样。希望这可以帮助。那里有太多错误/无效的答案...

            Process proc;
            try {
                //create a bash window
                proc = Runtime.getRuntime().exec("/bin/bash");
                if (proc != null) {
                       BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                       PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
                       BufferedReader err = new BufferedReader(new InputStreamReader(
                       proc.getErrorStream()));
                       //input into the bash window
                       out.println("cd /my_folder");
                       out.println("rm *.jar");
                       out.println("svn co path to repo");
                       out.println("mvn compile package install");
                       out.println("exit");
                       String line;
                        System.out.println("----printing output-----");
                          while ((line = in.readLine()) != null) {
                             System.out.println(line);
                          }
                          while((line = err.readLine()) != null) {
                             //read errors
                          }
                          proc.waitFor();
                          in.close();
                          out.close();
                          err.close();
                          proc.destroy();
                }

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

答案 9 :(得分:-1)

仅供参考, 如果需要在 if-else 中一行运行多个命令,可以用括号将命令分组。有关详细信息,请参阅此 page

您可以根据需要将分号 (;) 替换为 &&||。请注意,括号会创建一个子 shell 来执行命令。

如果存在名为file_name的文件,则以下命令执行cmd1、cmd2和cmd3命令;否则为 cmd4、cmd5 和 cmd6。

protected override void SetUpContentView()
{
    var insets = new UIEdgeInsets(SVConstants.Cell.PADDING.Top.ToNFloat(), SVConstants.Cell.PADDING.Left.ToNFloat(), SVConstants.Cell.PADDING.Bottom.ToNFloat(), SVConstants.Cell.PADDING.Right.ToNFloat());
    _Button = new UIButton(UIButtonType.RoundedRect)
              {
                  AutoresizingMask = UIViewAutoresizing.All,
                  HorizontalAlignment = UIControlContentHorizontalAlignment.Center,
                  VerticalAlignment = UIControlContentVerticalAlignment.Center,
                  ContentEdgeInsets = insets,
                  // TitleEdgeInsets = insets
              };

    DefaultFontSize = _Button.TitleLabel.ContentScaleFactor;
    DefaultTextColor = _Button.TitleLabel.TextColor;

    _Recognizer = new UILongPressGestureRecognizer(RunLong);
    _Button.TouchUpInside += OnClick;          // https://stackoverflow.com/a/51593238/9530917
    _Button.AddGestureRecognizer(_Recognizer); // https://stackoverflow.com/a/6179591/9530917


    ContentView.AddSubview(_Button);
    _Button.CenterXAnchor.ConstraintEqualTo(ContentView.CenterXAnchor).Active = true;
    _Button.CenterYAnchor.ConstraintEqualTo(ContentView.CenterYAnchor).Active = true;

    _Button.WidthAnchor.ConstraintEqualTo(ContentView.WidthAnchor).Active = true;
    _Button.HeightAnchor.ConstraintEqualTo(ContentView.HeightAnchor).Active = true;

    UpdateConstraintsIfNeeded();
    LayoutIfNeeded();
}