- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我将命令的参数存储在一个变量中。我想要的最终命令是:
mock -r myconfig --define "debug_package %{nil}" --resultdir results --rebuild mypackage.src.rpm
这是我的尝试:
set -x # for debugging
RESULTDIR=results
MOCK_CONFIG="myconfig"
MOCK_ARGS="-r $MOCK_CONFIG --define \"debug_package %{nil}\" --resultdir $RESULTDIR"
cmd="mock $MOCK_ARGS --rebuild mypackage.src.rpm"
$cmd
结果是:
+ RESULTDIR=results
+ MOCK_CONFIG=myconfig
+ MOCK_ARGS='-r myconfig --define "debug_package %{nil}" --resultdir results'
+ cmd='mock -r myconfig --define "debug_package %{nil}" --resultdir results --rebuild mypackage.src.rpm'
+ mock -r myconfig --define '"debug_package' '%{nil}"' --resultdir results --rebuild mypackage.src.rpm
ERROR: Bad option for '--define' ("debug_package). Use --define 'macro expr'
如您所见,--define
参数的参数没有被正确引用。 --define
认为我只传递了 debug_package
,这是不完整的。
在定义 MOCK_ARGS
时,我尝试了引号的各种变体,甚至试图转义 debug_package
和 %{nil}
之间的空格。
什么引号和/或转义符的组合允许我构建这个参数列表并从这个脚本执行命令?
编辑:
我将生成的命令存储在一个变量中的原因是因为它最终被传递给一个函数,该函数执行一些日志记录,然后执行命令。
另外,我遇到了this FAQ这表明我应该使用数组而不是变量。我已经开始尝试使用数组,但到目前为止还没有有效的解决方案。
最佳答案
数组是解决此类问题的方法。这是我想出的:
log_and_run() {
echo "$(date): running command: $*"
"$@"
echo "$1 completed with status $?"
}
RESULTDIR=results
MOCK_CONFIG="myconfig"
MOCK_ARGS=(-r "$MOCK_CONFIG" --define "debug_package %{nil}" --resultdir "$RESULTDIR")
cmd=(mock "${MOCK_ARGS[@]}" --rebuild mypackage.src.rpm)
log_and_run "${cmd[@]}"
# could also use: log_and_run mock "${MOCK_ARGS[@]}" --rebuild mypackage.src.rpm
请注意 $* 扩展为所有由空格分隔的参数(适合传递给日志命令);而“$@”将所有参数扩展为单独的单词(如在 log_and_run 中使用的那样,第一个将被视为要执行的命令,其余的将被视为它的参数);类似地,“${MOCK_ARGS[@]}”扩展为 MOCK_ARGS 的所有元素作为单独的单词,无论它们是否包含空格(因此 MOCK_ARGS 的每个元素都成为 cmd 的元素,没有引号解析混淆)。
此外,我还引用了 MOCK_CONFIG 和 RESULTDIR 的扩展;这在这里不是必需的,因为它们不包含空格,但这是一个好习惯,以防它们碰巧包含空格(例如,它是从外部传递到您的脚本中的吗?那么您应该假设它可能包含空格) .
顺便说一句,如果您需要向函数传递额外的参数(我将使用要登录的文件名示例),您可以使用 array slicing仅拆分后面的参数以用作记录/执行的命令:
log_and_run() {
echo "$(date): running command ${*:2}" >>"$1"
"${@:2}"
echo "$2 completed with status $?" >>"$1"
}
#...
log_and_run test.log "${cmd[@]}"
附录:如果你想在日志中引用包含空格的参数,你可以“手动”构造日志字符串并做任何你想引用的事情。例如:
log_and_run() {
local log_cmd=""
for arg in "$@"; do
if [[ "$arg" == *" "* || -z "$arg" ]]; then
log_cmd="$log_cmd \"$arg\""
else
log_cmd="$log_cmd $arg"
fi
done
echo "$(date): running command:$log_cmd"
...
请注意,这将处理参数中的空格和空白参数,但不处理(例如)参数中的双引号。 “正确”执行此操作可能会变得任意复杂...
另外,我构造 log_cmd 字符串的方式,它以一个前导空格结尾;我在上面通过在 echo 命令中省略它之前的空格来处理这个问题。如果您需要实际修剪空间,请使用 "${log_cmd# }"
。
关于bash - 在 bash 变量中引用不受尊重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58612754/
我每天运行命令将新记录插入 BigQuery 表,并想记录每天插入的记录数。 我创建了一个 QueryJob包含 SELECT 查询和 destination 表的对象。我将 write_dispos
当您登录受密码保护的页面时,WordPress 会设置一个类似于 wp-postpass_hash 的 cookie。 这个 cookie 似乎永远存在。我希望能够为用户提供“注销”链接。如果我不知道
我正在用 C++ 设计一个公共(public) API,我相信我想保留 C++ 属性函数样式约定,它们看起来像 int& Value() 和 const int& Value() const 而不是按
我正在构建一个使用 jQuery 图片库的网站。你可以看一个例子 here . 出于某种原因,当画廊更改图像时,或者当您手动更改图像时,页面高度似乎因为需要更好的词而“闪烁”。新图像似乎增加了页面高度
我正在尝试使用 CSS3 实现一个简单的 3D 照片库。它在 IE10+ 浏览器上运行良好,但在最新版本的 chrome 上有一个小错误,即单击时按钮消失。谁能告诉我如何解决这个问题?提前谢谢你。 w
我想知道为什么其中一些程序会抛出段错误,而另一些则不会。 这个程序抛出一个段错误: #include int main(){ int ar[2096263]; printf("asd
今天我移植了我的旧内存基准测试 从 Borland C++ builder 5.0 到 BDS2006 Turbo C++,发现奇怪的事情。 BCB5 的 exe 运行正常且稳定 来自 BDS2006
下面是我的代码,用于解决 PE 问题 7(“找到第 10001 个素数”): #include using namespace std; bool isPrime(int n, int primes
我有两个 float 元素,右边和左边。 它们的父元素都是 text-align: center, margin: auto: 1. text 999 ' style='curso
我正在为我的 UI 元素制作一个简单的动画。 我有一个动画组件,它有 2 个不同的动画 - ZoomIn 和 ZoomOut。 每当需要在屏幕上显示 UI 元素(例如按钮)时,就会显示这些动画。 我通
我正在使用 .net 3.5 和 vb.net。我对下面提到的每种加密的内部工作知之甚少。我只使用 .net 类库中提供的类。 我有一段信息已经用 TripleDes 加密,然后是 Rijndael,
我有一个关于正确设计 php 文件及其在服务器上的存储的一般性问题。 问题是这样的:我将一个 php 对象的函数拆分到不同的 php 文件中,例如: 文件 1 AndroidFlashCard.php
我在地址表单输入上有自动完成功能。当用户点击建议时,州和邮政编码信息会自动填充。cp_state 是带有状态名称下拉列表的选择框,而cp_zipcode 是邮政编码的输入文本。 我使用下面的 java
我试图按顺序选择记录,但随机限制。 SELECT * FROM tm_winners WHERE paid_out=0 ORDER BY DESC LIMIT RAND(4,8) 但是,我似乎无法随机
我有一张这样的表,我想选取 20 位 HitTest 门的歌手并按字母顺序对他们(这 20 位歌手)进行排序。 id name hit --------------
我正在尝试使用受风影响的雨粒子,也就是 physicsWorld 重力。 我可以看到重力确实对我的 SKSpriteNode 有影响,但我无法对 SKEmitterNode 产生相同的影响。 我只是想
我有一个问题,我在网站加载时调用淡入,但由于 css 过渡效果,元素变为完全不透明,立即淡出然后淡入,我试图找到解决这个问题的方法,因为它看起来很糟糕 jQuery $(window).on("loa
我定义了一个容器元素,包含一个float div和一个ul,并且 ul 元素包含一些 float li 元素。我想清除 ul 的 float ,但 ul 的高度受其 float 兄弟元素的影响。这是
我想使用一项服务。我 100% 确信该服务可以正常工作。 服务电话 public void add(User user) { ConnectionRequest con = new Connectio
如果您在桌面/PC 上访问某人的 instagram 页面,单击搜索栏时,它会向左浮动,然后可以输入文本进行搜索。当搜索字段中没有文本时,搜索图标和“搜索”占位符会回到原来的中心位置。 我假设 jav
我是一名优秀的程序员,十分优秀!