次のコードには、コマンドと文字列が含まれています。
files = `ls /tmp`
/tmp
静的文字列ではなく変数になりたいのですが、理想的には次のようになりたいです。
dir = '/tmp'
command = 'ls ' + dir
files = `command`
これを達成するための正しいRuby構文は何ですか?
次のコードには、コマンドと文字列が含まれています。
files = `ls /tmp`
/tmp
静的文字列ではなく変数になりたいのですが、理想的には次のようになりたいです。
dir = '/tmp'
command = 'ls ' + dir
files = `command`
これを達成するための正しいRuby構文は何ですか?
文字列補間を使用する:
dir = '/tmp'
files = `ls #{dir}`
標準のshellwordsライブラリを使用します。シェル インジェクション攻撃から保護するのに役立つ適切なエスケープを処理します。
require 'shellwords'
command = [
'ls',
dir
].shelljoin
files = `#{command}`
dirが信頼できない入力から来ている場合でも、上記のコードではシステム上の任意のディレクトリを誰かが見ることができます。ただし、shelljoin を使用すると、「ハード ドライブ上のすべてのファイルを削除する」コマンドなど、誰かが注入することから保護されます。
ディレクトリを一覧表示する特定のケースでは、組み込みクラスのDirがかなりうまく機能します。
files = Dir[File.join(dir, '*')]
ここでは、 File::joinを使用して、ディレクトリの末尾にグロブを追加します。 Dir::[]は、そのディレクトリ内のファイルのパスを返します。
files = `#{command}`
それはあなたが探しているものですか?