我有这个脚本目前在我们的x86_64服务器下运行,但是当我们尝试在ppc64服务器上运行时它不起作用:
HOME=$(eval echo ~$(whoami))
CACHE_DIR="$HOME/.jenkins/cache/archive"
CACHE_PATH="$CACHE_DIR"
if [ ! -d $CACHE_PATH ]
then
mkdir -p $CACHE_PATH
fi
if output=$(cmp --s requirements.txt $CACHE_PATH/requirements.txt)
then
echo "cached"
else
echo "build"
cp requirements.txt $CACHE_PATH/requirements.txt
fi
x86_64的输出
ubuntu@x86_agent:~$ bash tester.sh
build
ubuntu@x86_agent:~$ bash tester.sh
cached
ppc64le的输出(目标文件夹始终为空)
[xx@ppce64_agent /u/tpereira]$ bash testing.sh
cached
[xx@ppce64_agent /u/tpereira]$ bash testing.sh
cached
答案 0 :(得分:1)
我怀疑这是一个架构问题。难道你的软件版本略有不同(bash,cmp等)以不同的方式处理你脚本中的奇怪之处吗?
删除HOME=$(eval echo ~$(whoami))
。 HOME
是一个内置变量,应该由bash自动设置。将变量命名为小写以避免此类名称冲突。
此外,~
默认为当前用户的主目录。你可以写cacheDir=~/.jenkins/cache/archive
if output=$(cmp --s requirements.txt $CACHE_PATH/requirements.txt)
中有两个问题。
-s
选项应该只有一个短划线,而不是两个。-s
)?只需写下if cmp -s requirements.txt "$CACHE_PATH/requirements.txt"
。
对于instace rsync
,您可以使用现有的解决方案,而不是编写自己的脚本。
答案 1 :(得分:0)
你抓错了返回值。
您将变量设置为等于cmp
(标准输出)的输出。 cmp
不显示任何内容,它使用返回值作为答案。如果$?
是最后一个命令运行,则此值将包含在cmp
中,或者您可以这样做:
if cmp -s "$file1" "$file2"
then
echo "The files match"
else
echo "The files are different"
fi
这是有效的,因为它询问cmp
是否完成没有错误。任何非零返回值都被视为错误,并转到else
语句。