bash - 替代变量脚本不起作用
问题描述
我正在尝试用脚本替换变量,我确认变量包含有效值。该脚本在 Octopus“运行脚本”步骤中运行,没有显示错误,但文件没有被修改。
我尝试直接从终端运行 sed 并且它可以工作,但是当包含在从章鱼对目标运行的 bash 脚本中时,不会发生替换。我验证权限设置正确。
# This script is for the 'Substitute Application Variables' step in Octopus Deploy
tokens_key=$(get_octopusvariable "Tokens-Key")
tokens_issuer=$(get_octopusvariable "Tokens-Issuer")
tokens_expiration=$(get_octopusvariable "Tokens-Expiration")
tokens_domain=$(get_octopusvariable "Tokens-Domain")
environment=$(get_octopusvariable "Octopus.Environment.Name")
application=$(get_octopusvariable "ApplicationName")
version=$(get_octopusvariable "Octopus.Release.Number")
deployment_user=$(get_octopusvariable "DeploymentUser")
source_dir="/home/$deployment_user/.octopus/Applications/OctopusServer/$environment/$application/$version"
class_folder="WEB-INF/classes"
cd $source_dir
echo pwd
#extract the classes folder of the archive
echo "unzip $source_dir/$application.war"
unzip "$source_dir/$application".war
echo $tokens_key
echo $tokens_issuer
echo $tokens_expiration
echo $tokens_domain
echo "$class_folder/application.yml"
echo "running sed in $class_folder"
cd $class_folder
#manully replace all the variables
sed -i "s/#{Tokens-Key}/$tokens_key/g" "application.yml"
sed -i "s/#{Tokens-Issuer}/$tokens_issuer/g" "application.yml"
sed -i "s/#{Tokens-Expiration}/$tokens_expiration/g" "application.yml"
sed -i "s/#{Tokens-Domain}/$tokens_domain/g" "application.yml"
在 application.yml 中,#{Tokens-Key} 应该替换为变量 $tokens_key 的值,而不是占位符。所有其他占位符也是如此。
应用程序.yml
security:
type: cas
jwt:
tokens:
key: #{Tokens-Key}
issuer: https://#{Tokens-Issuer}
max-age: #{Tokens-Expiration} # 15min
cookie-domain: #{Tokens-Domain}
解决方案
推荐阅读
- javafx - sidepopupview 不向下滚动和滚动出界
- php - 将域设置为子目录,将子域设置为根目录
- angular - Angular 7 - 在运行时切换 Kendo UI 主题
- ssas - SQL Server 分析服务在维度字符串属性中传递空值和空白值
- office365 - 如何以编程方式获取标签活动报告(O365 数据治理)用户级别和文件级别?
- asp.net-core-2.1 - TryApplyChanges 没有得到更新的实际解决方案 Buildalyzer adhocworkspace
- python - 如何将多个不同维度的分类输入变量用于随机森林回归模型?
- docker - denied:请求的资源访问被拒绝
- javascript - 对地址进行地理编码时,标记未显示在地图中
- ecmascript-6 - 为什么在特定情况下需要 ES6 解构?