我的奇异容器中的一个软件包中的配置脚本之一包含(对我而言)完全合理的bash来修剪/
路径尾部;
if [ "${MY_DIR_PATH: -1}" = "/" ]; then
MY_DIR_PATH="${MY_DIR_PATH%?}"
fi
它在我的机器上可以正常运行,但是当从%post
奇异容器的部分运行时,它会失败Bad substitution
。怎么了,正确的解决方法是什么?
保存以下文本,badSubs.def
然后尝试;sudo singularity build badSubs.sif badSubs.def
。
BootStrap: docker
From: ubuntu:18.04
# what is done when the container is built
%post
# make print colour #
GREEN='\033[0;32m'
NOCOLOUR='\033[0m'
# start
#echo "${GREEN}~~~ Give the user permission and control ~~~ ${NOCOLOUR}"
#umask 000
echo "${GREEN}~~~ this should work fine! ~~~ ${NOCOLOUR}"
MYSCRIPT=$SINGULAITY_ROOTFS/confuzzel
touch $MYSCRIPT
chmod u+x $MYSCRIPT
echo '#! /bin/bash' >> $MYSCRIPT
echo 'PATHY="/what/a/path/"' >> $MYSCRIPT
echo 'if [ "${PATHY: -1}" = "/" ]; then ' >> $MYSCRIPT
echo ' echo yay!' >> $MYSCRIPT
echo ' PATHY="${PATHY%?}"' >> $MYSCRIPT
echo 'fi' >> $MYSCRIPT
echo 'echo $PATHY' >> $MYSCRIPT
cat $MYSCRIPT
./confuzzel
# metadata
%labels
Author ClumsyCat
Version v1.0
%help
to build me
> sudo singularity build badSubs.sif badSubs.def
to run me do
> singularity run badSubs.sif
我不熟悉奇异性,所以这是一个猜测,但是我认为您的脚本是由bash以外的shell运行的(也许是破折号?)。${var: number}
是变量扩展语法的非标准扩展;bash和其他一些shell支持它,其他(例如破折号)则不支持。
如果测试的唯一原因是找出变量是否以“ /”结尾,那么可以删除该变量,请不要打扰。这是POSIX标准的语法,如果变量以“ /”结尾,它将从变量的末尾删除“ /”:
MY_DIR_PATH=${MY_DIR_PATH%/}
如果确实需要测试,请改用以下方法:
if [ "${MY_DIR_PATH%/}" != "${MY_DIR_PATH}" ]; then
说明:这会将变量从头到尾与带有“ /” remove的变量进行比较。如果它们不同,则末尾必须有一个“ /”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句