linux - 在后台具有顺序输入文件的 Shell 脚本

标签 linux shell ubuntu

<分区>

我的 Linux 服务器(Ubuntu 12.04 LTS)上有 3 个脚本,expA、expB 和 expC。 然后,我得到了 32 个输入文件,分别命名为 nctu_0、nctu_1 ..... nctu_31。其中六个比其他的大得多,所以我为 expA 取了 3 个输入文件,为 expB 取了 3 个,另一个为 expC。

即 expA:运行 nctu_6 nctu_13 nctu_17 ,expB: 运行 nctu_20 nctu_24 nctu_31 ,expC: 运行其他文件

这里是expB的原始脚本,expA的脚本和expB几乎一样

#!/bin/bash
PROGRAM=./Simulator
FILE_PART_PREFIX1=/home//data/pcap_partial/h1200/nctu_
RESULT_PREFIX1=/home/data/setup_exp/h1200
RECEIVER_SIZE=4096
SENDER_SIZE=4096
BETA=0.25
UPDATE=400
MARKER=20
part=20
if [ ${part} -eq 20 ];then
nohup ${PROGRAM} 1 ${FILE_PART_PREFIX1}${part}.pcap ${RECEIVER_SIZE} ${SENDER_SIZE}    ${BETA} ${UPDATE} ${MARKER} ${MODE} >> ${RESULT_PREFIX1}/res_${part} 2>&1 &
fi
part=24
if [ ${part} -eq 24 ];then
nohup ${PROGRAM} 1 ${FILE_PART_PREFIX1}${part}.pcap ${RECEIVER_SIZE} ${SENDER_SIZE}   ${BETA} ${UPDATE} ${MARKER} ${MODE} >> ${RESULT_PREFIX1}/res_${part} 2>&1 &
fi
part=31
if [ ${part} -eq 31 ];then
nohup ${PROGRAM} 1 ${FILE_PART_PREFIX1}${part}.pcap ${RECEIVER_SIZE} ${SENDER_SIZE} ${BETA} ${UPDATE} ${MARKER} ${MODE} >> ${RESULT_PREFIX1}/res_${part} 2>&1 &
fi

我想先运行 nctu_20,然后在 nctu_24 完成后运行 nctu_24。最后在 nctu_24 完成后运行 nctu_31。


这里是expC的原始脚本

#!/bin/bash
PROGRAM=./Simulator
FILE_PART_PREFIX1=/home/data/pcap_partial/h1200/nctu_
RESULT_PREFIX1=/home/data/setup_exp/h1200
RECEIVER_SIZE=4096
SENDER_SIZE=4096
BETA=0.25
UPDATE=400
MARKER=20
for (( part=0;part<32;part=part+1 ))
do
if [ ${part} -eq 6 ] || [ ${part} -eq 13 ] || [ ${part} -eq 17 ] || [ ${part} -eq 20 ] ||[ ${part} -eq 24 ] || [ ${part} -eq 31 ];then
continue
else
nohup ${PROGRAM} 1 ${FILE_PART_PREFIX1}${part}.pcap ${RECEIVER_SIZE} ${SENDER_SIZE} ${BETA} ${UPDATE} ${MARKER} ${MODE} >> ${RESULT_PREFIX1}/res_${part} 2>&1 &
fi
done

简而言之,我想同时运行 expA、expB expC,它们各自在后台启动一个带有顺序输入文件的模拟器程序。有人可以帮助我吗?

最佳答案

我不确定我是否完全理解您的需求,但是如果您想同时运行它们,我认为 bash 无法帮助您。你应该用其他一些支持线程的语言编写一个包装器,这里是 perl 中的例子:

#!/usr/bin/perl
use strict;
use warnings;
use threads;

sub start_simulator {
   my $simulator = shift;
   system("./$simulator");
}

my $thA = threads->create('start_simulator', 'expA');
$thA->detach();

my $thB = threads->create('start_simulator', 'expB');
$thB->detach();

my $thC = threads->create('start_simulator', 'expC');
$thC->detach();

exit 0;

将这个包装器添加到您拥有 shell 脚本的同一目录中,并使用 ./perl_wrapper.pl 运行它。

关于linux - 在后台具有顺序输入文件的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12357152/

相关文章:

python - Ubuntu, fatal error : Python. h : No such file or directory #include <Python. h>

linux - jqGrid 停止在 Archlinux 上加载 json 数据

c - 原始克隆系统调用

linux - 计算列中负数的总和?

计算 C 源代码中忽略注释和空行的行数

ubuntu - Nginx:安全和 httponly cookie

c - socket connect() 返回 errno EINVAL

java - 如何在不使用shell的情况下将多个文件提供给java中的命令行

linux - 如何获取包含 T 日期作为文件名一部分的文件计数

java - PulseAudio:无法连接:LibGDX 中的连接被拒绝