bash - 调用带有参数“#”的 bash 命令
问题描述
考虑以下代码:
sqls='/mnt/c/alias/Binn/SQLCMD.EXE -b -S HostName -U Username -P MyPW# -d dbName'
dbName
这是使用用户名连接到 SQL Server DB 的命令的Username
前缀HostName
`$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 上,所以不确定)来存储默认用户、通行证和数据库,使您能够运行查询而无需每次都传递所有这些选项。
推荐阅读
- .net-core - 我的 Lambda 在启动和一线之间做了什么?
- php - PHP:JSON_DECODE 不适用于以下数据
- php - 在 Laravel 5.3 中,auth::loginUsingId() 给出了一个未定义的错误
- python - 将 numpy 矩阵逐行转换为 pandas 数据帧或系列
- python - 如何遍历由节点组成的二叉树?(里面的代码)
- mongodb - MongoDB 写入问题:不同的数据库显示相同文档的不同计数
- python - Python webscraping - 实时数据
- android - 是否可以使用具有两个不同 API 密钥的 Google Maps SDK 和 Places SDK for Android,每个密钥一个(或其他安全地点查找)?
- python - python测试:写入3,读取2
- android - 在启动画面上检查 Internet 状态