相关疑难解决方法(0)

使用正确的引用将命令写入脚本文件

我遇到过几次的情况:我有一个 shell 函数,它进行一些设置,然后调用或多或少的任意命令,如下所示:

setup_and_run() {
    some_setup_commands
    "$@"
}
Run Code Online (Sandbox Code Playgroud)

我想改变这个函数来编写一个脚本文件,我可以在完成相同的设置后使用它重新运行命令。我可以执行以下操作,这在命令中没有带空格或其他奇怪内容的参数时有效:

setup_and_run() {
    some_setup_commands
    cat >>rerun.sh <<EOF
some_setup_commands
$@
EOF
    "$@"
}
Run Code Online (Sandbox Code Playgroud)

有没有一种标准的方法来改变这一点,以便脚本得到正确的引用,一般来说,即使某些参数有空格或其他特殊字符?

例如,对于 的第二个定义setup_and_run,如果我运行

$ setup_and_run ls "my cat's \"password\""
my cat's "password"
Run Code Online (Sandbox Code Playgroud)

然后rerun.sh将包含

some_setup_commands
ls my cat's "password"
Run Code Online (Sandbox Code Playgroud)

而我希望它包含类似的东西

some_setup_commands
ls "my cat's \"password\""
Run Code Online (Sandbox Code Playgroud)

或者

some_setup_commands
ls my\ cat\'s\ \"password\"
Run Code Online (Sandbox Code Playgroud)

或者一些这样的事情。

在紧要关头,我可以将其外包给 Python 之类的东西shlex.quote(),但我正在寻找可以在 shell 本身中完成的事情,如果可能的话,或者至少使用轻量级的标准 UNIX 工具。

bash shell-script quoting

5
推荐指数
1
解决办法
1006
查看次数

标签 统计

bash ×1

quoting ×1

shell-script ×1