'、"、' などの文字を含むコマンド ライン引数として、HTML コンテンツを渡す必要があるだけです。unix でこれを単一の引数として渡すにはどうすればよいですか?
4 に答える
コマンド ラインで入力している場合は、次のハックを使用できます。
some_program -some_option some_argument "$(cat)"
any text you like with ` or " or $ or < or whatever
^D
最後はcontrol-D(ファイルの終わり)です
それをbashスクリプトに入れるには、ヒアドキュメントを使用できます:
some_program -some_option some_argument "$(cat <<'EOF'
any text you like with ` or " or $ or < or whatever
EOF
)"
テキストが EOF の文字ではない限り、これは機能します (そうであれば、両方の場所で EOF を別のものに変更するだけです)。
しかし、私はそれらのどちらもあなたがやりたいことではないと思います。別のプログラム (Lua) からプログラムを呼び出そうとしていると思います。残念ながら、すぐに使用できる Lua には、それを実行できる機能はありません。シェル (bash ではなく /bin/sh) を使用してコマンドラインを解釈する os.execute のみを提供します。
Mark Edgar によって書かれたLua の優れた実装がありましたが、spawn
それがまだ維持されているかどうかはわかりません。それができない場合でも、2 番目のハックを使用できます。
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)
私があなたの要件を正しく理解していれば、コマンドラインから二重引用符で何かを渡すことができます. これは単一の引数として扱われ、必要に応じて解析できる文字列としてプログラムで受信されます。
ACプログラムはこちら
#include <stdio.h>
int main(int c, char *argv[])
{
printf("argument is %s\n", argv[1]);
return 0;
}
コンソールで、コンパイルして実行しました
$ gcc args.c
$ ./a.out "<img src=\"image.png\" onload='alert(/loaded/)' />"
出力は
引数は
<img src="image.png" onload='alert(/loaded/)' />
引数内の "" (二重引用符)、バックスラッシュ \ などの特殊文字については、追加のエスケープ シーケンス \ を先頭に追加するだけです。