Bash Prodigy 中的变量替换

Bash variable substitution in Prodigy

我想导出 Prodigy tagging session through the command db-out. Prodigy is installed in a Google Compute Engine VM 的结果,但我不是它的所有者,因此,我正在尝试的结果如下所示:

# Assume `test1` exists
DB_NAME="test1"
#  `super_user` is Prodigy owner's home directory.
sudo runuser -l super_user -c 'python3 -m prodigy db-out "$DB_NAME" > ./"$DB_NAME".jsonl'

前面的命令应该生成一个 test1.jsonl 文件,应该在 super_user 主目录中找到;但是,没有生成 test1.jsonl。顺便说一句,当这些行是 运行 时,不会显示任何警告或错误。

不过,当我直接运行下面的命令时:

sudo runuser -l super_user -c 'python3 -m prodigy db-out test1 > ./test1.jsonl'

test1.jsonl 文件已正确生成,正如预期和之前解释的那样。为什么?

补充说明/更新:

  1. 无需解释 runuser or db-out 命令的作用。我认为该错误与我这边的(可能?)错误的变量替换有关,我现在没有看到。

在关注 this post (which was kindly suggested by Gordon Davidson 并强烈建议对其进行修订后),我设法解决了原来的问题。更正后的代码如下所示:

DB_NAME="test1"
sudo runuser -l super_user -c "python3 -m prodigy db-out $DB_NAME > ./$DB_NAME.jsonl"

为了清楚起见,它们是:

  1. 单引号被双引号代替。
  2. 内部双引号被丢弃。

之后,脚本按预期运行。如果我理解 this post 正确,可能会有一些其他有效的答案;不过这个目前有效。

谢谢。