どうやら、実行中:
Perl -n -e 'some Perl code' *
または
find . ... -exec Perl -n -e '...' {} +
(と同じ -p
の代わりに -n
)
または
Perl -e 'some code using <>' *
このサイトに投稿されたワンライナーによく見られる、セキュリティへの影響があります。どうしたんだ?それを避ける方法は?
@StéphaneChazelasの回答 に加えて、-i
コマンドラインオプションを使用すれば、この問題を心配する必要はありません。
$ Perl -pe '' 'uname|'
Linux
$ Perl -i -pe '' 'uname|'
Can't open uname|: No such file or directory.
-i
オプションを使用する場合、Perl
は stat を使用して、処理する前にファイルのステータスを確認しました。
$ strace -fe trace=stat Perl -pe '' 'uname|'
stat("/home/cuonglm/Perl5/lib/Perl5/5.20.1/x86_64-linux", 0x7fffd44dff90) = -1 ENOENT (No such file or directory)
stat("/home/cuonglm/Perl5/lib/Perl5/5.20.1", 0x7fffd44dff90) = -1 ENOENT (No such file or directory)
stat("/home/cuonglm/Perl5/lib/Perl5/x86_64-linux", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
Process 6106 attached
Linux
Process 6105 suspended
Process 6105 resumed
Process 6106 detached
--- SIGCHLD (Child exited) @ 0 (0) ---
$ strace -fe trace=stat Perl -i -pe '' 'uname|'
stat("/home/cuonglm/Perl5/lib/Perl5/5.20.1/x86_64-linux", 0x7fffdbaf2e50) = -1 ENOENT (No such file or directory)
stat("/home/cuonglm/Perl5/lib/Perl5/5.20.1", 0x7fffdbaf2e50) = -1 ENOENT (No such file or directory)
stat("/home/cuonglm/Perl5/lib/Perl5/x86_64-linux", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("uname|", 0x785f40) = -1 ENOENT (No such file or directory)
Can't open uname|: No such file or directory.