繁体   English   中英

调用带有参数“#”的bash命令

[英]Invoking a bash command with an argument '#' in it

考虑以下代码:

sqls='/mnt/c/alias/Binn/SQLCMD.EXE -b -S HostName -U Username -P MyPW# -d dbName'

这是在HostName上使用用户名Username连接到SQL Server DB dbName的命令的前缀

`$sqls -Q "select 1;"`

在其上执行select 1语句,它可以按预期工作。

$($sqls -Q "select 1;")

失败。 为什么? 是因为密码中的“#”吗? 我应该如何更改上面的sqls行,使其与$(...)表达式一起使用?

将命令存储在字符串中很容易失败 我们可以弄清楚为什么它不起作用,但是更好的办法是使用一个函数:

sql() {
  /mnt/c/alias/Binn/SQLCMD.EXE -b -S HostName -U Username -P 'MyPW#' -d dbName -Q "$1"
}

这样可以使用引号引起来,从而消除了可能破坏命令的可能性。

sql 'select 1'一样使用它。 使用标准命令替换保存结果:

foo=$(sql 'select 1')

还请记住,您可以使用配置文件(可能是$HOME/.my.cnf ,但看起来好像在Windows上,所以不确定)可以存储默认用户,密码和数据库,从而使您可以运行查询而无需密码所有这些选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM