linux - 在 unix 中将多行、带引号的字符串作为单个命令行参数传递?

标签 linux string bash unix

我只需要将任何 HTML 内容作为命令行参数传递,其中包括诸如 '、"、` 之类的字符?我如何在 unix 中将其作为单个参数传递?

最佳答案

如果您在命令行输入,您可以使用以下技巧:

some_program -some_option some_argument "$(cat)"
any text you like with ` or " or $ or < or whatever
^D

最后是control-D(文件结尾)

要将其放入 bash 脚本中,您可以使用 Here 文档:

some_program -some_option some_argument "$(cat <<'EOF'
any text you like with ` or " or $ or < or whatever
EOF
)"

只要文本不完全是字符 EOF(如果是,您只需将两个地方的 EOF 都更改为其他字符),它就可以工作。

但我认为这些都不是您想要做的。我认为你正试图从另一个程序(在 Lua 中)调用一个程序。不幸的是,开箱即用的 Lua 不提供任何可以做到这一点的功能。它只提供os.execute,它使用shell(/bin/sh,不是bash)来解释命令行。

Mark Edgar 为 Lua 编写了一个很好的 spawn 实现,但我不知道它是否仍在维护。如果做不到这一点,您仍然可以使用第二个 hack:

require("os")

function call_with_arg(prog, rawtext)
  return os.execute(prog.." \"$(cat <<'EOF'\n"..rawtext.."\nEOF\n)\"")
end
local html =
  [=[<html><body><img src="image.png" onload='alert("loaded")'/></body></html>]=]

call_with_arg("echo >somefile.txt", html)        

关于linux - 在 unix 中将多行、带引号的字符串作为单个命令行参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12576982/

相关文章:

c++ - 为什么 'dd' 从管道读取的速度比我自己使用 ifstream 的程序更快?

c - 理解 char *、char[] 和 strcpy()

java - 使用 Java 读写 CSV 文件

linux - 使用 bash 读取上一行

linux - Bash 检查环境变量设置在环境变量数组中

bash - 在 bash 脚本中读取函数中的标准输入

c++ - 以 root 身份运行应用程序时如何获得 stdio 输出?

mysql - 在 Linux 机器上远程连接到 mysql 时出现问题

linux - 用于在 Linux 上监视磁盘 i/o 速率的脚本

c# - String.Join 和 String.Split 参数助记符