从bash脚本以编程方式运行exec

时间:2019-05-09 05:25:41

标签: bash docker singularity-container

我想在各种图像中执行命令。我使用了一个简单的for bash循环。

for i in `ls *.sif`
do
   singularity exec $i cat /etc/os-release
done

我希望脚本为该目录中的所有映像打印操作系统发行版信息。而是打印第一个信息并返回提示。如果运行fg命令,将执行下一个图像中的命令,依此类推。对于n张图片,我必须运行fg命令n-1次。

有趣的是,如果我将命令替换为timeout 10 singularity exec $i cat /etc/os-release,它将继续执行,但不会在容器内运行该命令。

2 个答案:

答案 0 :(得分:0)

它只是按我的预期工作(在CentOS-7上为3.2.0),您可以使用干净的〜/ .bashrc文件重试吗?或带有空的绑定$ HOME?或带有--no-home标志

H=`mktemp -d`
for i in *.sif; do
echo "$i"
singularity exec -H "$H" "$i" cat /etc/os-release
done

如果使用这3个选项,您的exec正常工作,则需要修复.bashrc文件。

答案 1 :(得分:-1)

认为循环应该看起来像这样:

for i in */*.sif
do
    singularity exec "$i" cat /etc/os-release
done