如何将Databricks CLI命令输出用于其他Unix命令
正确实现方案
你要的存储匹配结果到变量的需求,直接用管道串联databricks命令和grep即可,参考写法:
# 替换<profile_name>和<pattern>为你实际的配置和匹配规则即可 matched_jars=$(databricks fs ls dbfs:/fs/jars/ --profile <profile_name> | grep "<pattern>.*\.jar")
之前写法的错误原因
- 第一,grep默认使用正则匹配规则,不是shell通配符规则,你直接写
*<pattern>*.jar且不加引号,首先shell会先在本地当前路径匹配符合通配符的文件,替换参数后再传给grep,完全不会匹配dbfs返回的文件名 - 第二,输入输出方向搞反:你需要把databricks fs ls的输出作为grep的输入,用管道
|串联即可,不需要混用管道和输入重定向,更不需要额外加cat
验证与扩展
你可以先执行以下命令确认匹配结果是否符合预期:
databricks fs ls dbfs:/fs/jars/ --profile <profile_name> | grep "<pattern>.*\.jar"
如果存在多个匹配结果需要逐个处理,可以用如下循环:
while read -r jar_name; do # 此处写你针对每个jar包的后续操作逻辑,比如拷贝、部署等 echo "找到匹配包:$jar_name" done <<< "$matched_jars"
注意:如果你的匹配规则
<pattern>中包含正则特殊字符(比如.、*、?等),需要在特殊字符前加反斜杠\转义,避免匹配结果不符合预期。
内容的提问来源于stack exchange,提问作者Subhash Ghai
相关产品推荐
相关产品推荐

