14

'、"、' などの文字を含むコマンド ライン引数として、HTML コンテンツを渡す必要があるだけです。unix でこれを単一の引数として渡すにはどうすればよいですか?

4

4 に答える 4

12

コマンド ラインで入力している場合は、次のハックを使用できます。

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)        
于 2012-09-25T16:28:05.890 に答える
2

私があなたの要件を正しく理解していれば、コマンドラインから二重引用符で何かを渡すことができます. これは単一の引数として扱われ、必要に応じて解析できる文字列としてプログラムで受信されます。

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/)' />

引数内の "" (二重引用符)、バックスラッシュ \ などの特殊文字については、追加のエスケープ シーケンス \ を先頭に追加するだけです。

于 2012-09-25T06:02:33.983 に答える