gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:42:30 25 4
gpt4 key购买 nike

我想启动同一程序的多个副本,其中每个程序副本都有不同的输入,这些输入存储在单独的目录中。我尝试编写以下 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. Shebang 不完整。 !/bin/bash 应该是 #!/bin/bash

  2. CODEDIR=../../../.. 确实是不好的做法。这样脚本就只能从一个目录运行。

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

  4. 你真正的问题。您的问题是“我想启动多个副本...”我认为这是因为您想一次启动多个长时间运行的作业,而不是连续执行它们。然后你应该执行作业 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 并不是最好的主意,您应该将路径放在参数中。

关于linux - 可以从不同目录启动同一进程的多个副本的 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29182783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com