bash - 语法错误:运行 docker exec 命令时未终止的引号字符串
问题描述
我已经处理了大约 3 天。我尝试了大多数双引号和单引号的组合,查看了大多数 stackoverflow 问题和答案,但仍然没有运气:( 下面是我的问题的简化版本。
> line="008256042a1b sh -c \"mysqldump databasename\""
> echo $line
008256042a1b sh -c "mysqldump databasename"
> docker exec $line
databasename": 1: databasename": Syntax error: Unterminated quoted string
解决方案
问题是你试图在 $line 中放一个命令,就像你想运行:
sh -c \"mysqldump Database\"
Database": 1: Syntax error: Unterminated quoted string
这应该工作:
line=(008256042a1b sh -c "mysqldump databasename")
echo "${line[@]}"
docker exec "${line[@]}"
"mysqldump databasename"
是单个字符串。
\"mysqldump databasename\"
实际上是两个字符串。
"${line[@]}"
允许数组项的适当扩展。
推荐阅读
- python - 如何切片熊猫 MultiIndex df 保留所有值直到满足特定条件?
- c# - .NET Core RedirectToAction 导致 InvalidOperationException 错误
- java - PreparedStatement 中没有包含 2 个对象的结果“In”子句
- javascript - Angular 7:如何为延迟加载的路由器创建单元测试
- postgresql - 在 Postgres 中更改 JSONB 列中的值类型
- reactjs - 画布上超长文本的多行拆分(添加换行符)
- excel - Excel 文件大小为 23MB,只有 9 个数据整体和一个 VBA 脚本
- php - 我收到错误 FatalThrowableError 类型错误:传递给 Illuminate\Http\Request::merge() 的参数 1 必须是数组类型,给定 null
- android - 在它上调用方法与在 ?.let body 中引用之间的区别
- javascript - 基于动态传递的属性从对象数组中获取唯一值