一个shell脚本,可以从不同的目录启动相同进程的多个副本

时间:2015-03-21 12:36:40

标签: linux bash shell

我想启动同一程序的多个副本,其中每个程序副本具有存储在不同目录中的不同输入。我尝试编写以下shell脚本来启动程序的5个副本,但它只启动一个程序。我想该脚本在第一个目录启动程序后不会将其移动到下一个目录。我的脚本在下面 -

! /bin/bash

CODEDIR=../../../..
PROGRAM_BIN=$CODEDIR/bin/PROGRAM


cd 'path_to_directory_1'
$PROGRAM_BIN input1
echo 'Fisrt program has started'

cd 'path_to_directory_2'
$PROGRAM_BIN input2

echo 'Second program has started'

cd 'path_to_directory_3'
$PROGRAM_BIN input3
echo 'Third program has started'

cd 'path_to_directory_4'
$PROGRAM_BIN input4
echo 'Fourth program has started'

cd 'path_to_directory_5'
$PROGRAM_BIN input5

echo 'Fifth program has started'

1 个答案:

答案 0 :(得分:0)

几个问题:

  1. Shebang不完整。 !/bin/bash应为#!/bin/bash

  2. CODEDIR=../../../..真的很糟糕。这样,脚本只能从一个目录运行。

  3. $ PROGRAM_BIN应为$PROGRAM_BIN。没有空格。

  4. 你真正的问题。你的问题是“我想要启动多个副本...”我认为你想要同时启动几个长时间运行的作业,而不是连续执行它们。然后,您应该使用控制字符&执行作业in background

  5. 更正后的脚本:

    #!/bin/bash
    
    CODEDIR=../../../..
    PROGRAM_BIN=$CODEDIR/bin/PROGRAM
    
    cd 'path_to_directory_1'
    $PROGRAM_BIN input1 &
    echo 'Fisrt program has started' >&2
    
    cd 'path_to_directory_2'
    $PROGRAM_BIN input2 &
    echo 'Second program has started' >&2
    
    cd 'path_to_directory_3'
    $PROGRAM_BIN input3 &
    echo 'Third program has started' >&2
    
    cd 'path_to_directory_4'
    $PROGRAM_BIN input4 &
    echo 'Fourth program has started' >&2
    
    cd 'path_to_directory_5'
    $PROGRAM_BIN input5 &
    echo 'Fifth program has started' >&2
    

    顺便说一句,我知道某些程序很多都是从某个目录运行才能正常运行(我有多个这样的脚本)。但是,对于大多数用途,cd并不是最好的想法,您应该将路径放在参数中。