使用Here Document自动填充databricks configure --token命令的token值失败求助
Here Document自动填充databricks configure --token命令的token值失败求助
嘿,我来帮你分析下这个问题~ 首先咱们先排查几个可能的原因:
1. Databricks CLI的交互读取方式可能不支持标准输入重定向
很多CLI工具为了安全性(比如输入token这类敏感信息),会直接从终端(tty)读取输入,而不是从标准输入(stdin)。这时候你用Here Document重定向stdin的方式就不起作用了——因为命令根本没在听stdin的内容,它直接去读终端了。
2. 先修正脚本里的拼写小错误(虽然这可能不是token没填充的直接原因,但会影响后续排查)
你脚本里有几处明显的笔误:
- 把
variable拼成了vairiable - 检查
DATARBICKS_TOKEN变量时,错误输出了DATARBICKS_HOST的提示信息
这些小问题虽然不影响变量传递,但会给后续维护带来混淆,建议先修正。
接下来给你几个可行的解决方案:
方案一:用printf管道替代Here Document试试
有时候管道的方式比Here Document更可靠,你可以把脚本里的最后一段改成:
printf "%s\n%s\n" "$DATABRICKS_HOST" "$DATABRICKS_TOKEN" | databricks configure --token
如果这个还是不行,那基本可以确定命令是直接读tty的,就得用下面的expect方案了。
方案二:用expect脚本模拟终端交互
expect工具可以专门模拟终端的输入操作,完美解决这类直接读tty的命令。你可以写个简单的expect脚本:
#!/usr/bin/expect set timeout 10 # 从命令行参数获取host和token set host [lindex $argv 0] set token [lindex $argv 1] # 启动databricks配置命令 spawn databricks configure --token # 匹配Host的输入提示 expect "Databricks Host (should begin with https://):" # 发送Host值,用\r模拟回车 send "$host\r" # 匹配Token的输入提示 expect "Token:" # 发送Token值 send "$token\r" # 等待命令执行完成 expect eof
把这个脚本保存为configure_databricks.exp,给它加执行权限:chmod +x configure_databricks.exp,然后在你的原脚本里替换掉Here Document那段,改成:
./configure_databricks.exp "$DATABRICKS_HOST" "$DATABRICKS_TOKEN"
记得先确保你的系统安装了expect工具(Debian/Ubuntu可以用apt install expect,CentOS/RHEL用yum install expect)。
方案三:用非交互式的环境变量配置(最推荐!)
其实Databricks CLI本身支持直接通过环境变量来配置,完全不需要交互!你只需要设置好两个环境变量,命令会自动读取它们:
export DATABRICKS_HOST="$DATABRICKS_HOST" export DATABRICKS_TOKEN="$DATABRICKS_TOKEN" # 如果需要指定profile,可以加--profile参数 databricks configure --token --profile default
这个方法最简洁,也避免了交互模拟的麻烦,强烈推荐试试!
备注:内容来源于stack exchange,提问作者Bartosz Wichowski
相关产品推荐
相关产品推荐

