我想启动同一程序的多个副本,其中每个程序副本具有存储在不同目录中的不同输入。我尝试编写以下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'
答案 0 :(得分:0)
几个问题:
Shebang不完整。 !/bin/bash
应为#!/bin/bash
。
CODEDIR=../../../..
真的很糟糕。这样,脚本只能从一个目录运行。
$ PROGRAM_BIN
应为$PROGRAM_BIN
。没有空格。
你真正的问题。你的问题是“我想要启动多个副本...”我认为你想要同时启动几个长时间运行的作业,而不是连续执行它们。然后,您应该使用控制字符&
执行作业in background。
更正后的脚本:
#!/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
并不是最好的想法,您应该将路径放在参数中。