Bash 直线别名

Bash beeline alias

我经常从命令行使用直线,所以我想为直线命令创建一个 bash 别名,它会为我处理所有样板文件并进行一些参数解析和其他操作。具体来说,我想做的一件事是创建一个 showtables 命令,它接受一个参数,即数据库的名称,并使用样板调用 beeline 命令,并将 -e 参数与适当的 SQL,即 - showtables db1 应该调用 /usr/bin/beeline -u $config -e "SHOW TABLES IN db1"。我的源文件如下所示:

/usr/bin/beeline --showHeader=False --outputformat=tsv2 -u $config -e \"SHOW TABLES IN \"

但输出是

...
Error: Error while compiling statement: FAILED: ParseException line 1:4 cannot recognize input near 'SHOW' '<EOF>' '<EOF>' in ddl statement (state=42000,code=40000)
Error: Error while compiling statement: FAILED: ParseException line 1:0 cannot recognize input near 'TABLES' '<EOF>' '<EOF>' (state=42000,code=40000)
Error: Error while compiling statement: FAILED: ParseException line 1:0 cannot recognize input near 'IN' '<EOF>' '<EOF>' (state=42000,code=40000)
Error: Error while compiling statement: FAILED: ParseException line 1:0 cannot recognize input near 'db1' '<EOF>' '<EOF>' (state=42000,code=40000)
...

我已经验证了

/usr/bin/beeline --showHeader=False --outputformat=tsv2 -u $config -e "SHOW TABLES IN db1"

按预期工作。我不明白为什么我的可执行文件不工作。

引号前的反斜杠使它们从解析的角度表现得像普通字符,而不是引号。因此,当您在引号前面加上反斜杠时,SHOW TABLES IN db1 不再是一个字符串,而是四个单独的字符串:"SHOWTABLESINdb1".

当 运行 单独使用这些词时,这些词不是有效查询 - 因此您的错误。去掉反斜杠,问题就消失了。