blog.bouzuya.net

2020-04-07 shell-quote を使った

npm:shell-quote を使った。

shell-quote はシェルコマンドの quote や parse をする npm パッケージ。

child_process.exec() は標準出力やエラー出力を文字列で返してくれて手軽にコマンドを実行できる。ただそのままシェルに文字列を渡されてしまうので適切にエスケープする必要がある。ドキュメントに強調して書いてある。

Never pass unsanitized user input to this function. Any input containing shell metacharacters may be used to trigger arbitrary command execution.

そこで shell-quote を使う。変数やパイプなどは適切にエスケープされる。公式にある例を↓に示す。

var quote = require('shell-quote').quote;
var s = quote([ 'a', 'b c d', '$f', '"g"' ]);
console.log(s); // a 'b c d' \$f '"g"'

便利だ。

ちなみに child_process.spawn()args: string[] を取れるので shell オプションを使わなければシェル関連のエスケープは気にしなくても良さそうだ。実装としては exec -> execFile -> spawn なので最終的にはどれも spawn につながる。


朝寝坊した。朝活の連続記録が止まってしまった。もう数えていなかったけど。

昼と夜で ABC040 を解いた 。 C は典型 DP だし、 D も制約的に Union-Find 以外が思いつかなかった。