在Azure DevOps中创建内联bash命令时:
checksum="$(cksum file.txt)"
我最终会看到cksum file.txt
是必需的参数。出于某种原因,这种行为并不一致,因此有时我会设置与内联Bash脚本配合使用的构建管道,但不可避免地,我会遇到此问题,无法修复。
我什至尝试将cksum file.txt
参数设置为cksum file.txt
,但是用编码字符串%20
替换了空格。它变成cksum%20file.txt
,在bash中不是有效命令。
这是完整的脚本:
yarnCacheFilename="$(cksum yarn.lock).yarnCache.docker.tgz"
wget "https://example.azureedge.net/yarn-cache/$yarnCacheFilename"
if [ -f "$yarnCacheFilename" ]; then
mkdir node_modules
tar -xzvf "$yarnCacheFilename"
else
yarn install --production
fi
足够简单。那是我可以在任何bash
终端中运行的代码。可悲的是,Azure DevOps向任务组添加了一个参数:
存在此参数的事实意味着Azure DevOps阻止了我的bash文件正确执行并替换了最关键的部分。
如何解决此问题?
答案 0 :(得分:1)
您可以使用命令替换,因此请在两边都用反斜杠`替换$()。
https://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html了解有关命令替换的更多信息。
checksum="`cksum file.txt`"
完整脚本示例
yarnCacheFilename="`cksum yarn.lock`.yarnCache.docker.tgz"
wget "https://example.azureedge.net/yarn-cache/$yarnCacheFilename"
if [ -f "$yarnCacheFilename" ]; then
mkdir node_modules
tar -xzvf "$yarnCacheFilename"
else
yarn install --production
fi
答案 1 :(得分:0)
如果您要在内置bash脚本中将字符串“ cksum file.txt
”作为参数传递,则可以设置一个变量,并在后续任务/脚本中使用该变量。
例如:
设置checksum
变量:
echo "##vso[task.setvariable variable=checksum]cksum file.txt"
读取变量
echo "No problem reading $CHECKSUM"
有关详细信息,请参见Define and modify your variables in a script。
如果您运行的脚本指定的路径类似于$/project/script/Test0427/bash.sh
,则可以直接将字符串作为参数传递
参数:
“ cksum file.txt
”“ Test Arguments 1018
”
读取变量
echo "No problem reading $1 and $2"