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
不再是一个字符串,而是四个单独的字符串:"SHOW
、TABLES
、IN
和 db1"
.
当 运行 单独使用这些词时,这些词不是有效查询 - 因此您的错误。去掉反斜杠,问题就消失了。
我经常从命令行使用直线,所以我想为直线命令创建一个 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
不再是一个字符串,而是四个单独的字符串:"SHOW
、TABLES
、IN
和 db1"
.
当 运行 单独使用这些词时,这些词不是有效查询 - 因此您的错误。去掉反斜杠,问题就消失了。