[解決済み] "which in ruby "です。Rubyから$PATHにプログラムが存在するかチェックする
2023-08-02 14:59:59
質問
私のスクリプトは、外部のプログラムやスクリプトに大きく依存しています。 呼び出す必要のあるプログラムが存在することを確認する必要があります。 手動で、私はコマンドラインで 'which'を使用してこれをチェックします。
に相当するものはありますか?
File.exists?
に相当するものはありますか?
$PATH
?
(そうです、私は
%x[which scriptINeedToRun]
を解析することもできますが、それは超エレガントではありません。
ありがとうございます。 yannick
UPDATE: 私が保持した解決策を紹介します。
def command?(command)
system("which #{ command} > /dev/null 2>&1")
end
UPDATE 2: いくつかの新しい回答が寄せられました - 少なくともこれらのいくつかはより良い解決策を提供しています。
最新情報 3: このページでは ptools gem によって、File クラスに "which" メソッドが追加されました。
どのように解決するのですか?
真のクロスプラットフォームソリューション、Windows上で正しく動作します。
# Cross-platform way of finding an executable in the $PATH.
#
# which('ruby') #=> /usr/bin/ruby
def which(cmd)
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
exts.each do |ext|
exe = File.join(path, "#{cmd}#{ext}")
return exe if File.executable?(exe) && !File.directory?(exe)
end
end
nil
end
これはホストOSのスニッフィングを使わず、Windows上で実行可能なファイル拡張子をリストアップする$PATHEXTを尊重します。
へのシェリングアウト
which
は多くのシステムで動作しますが、すべてではありません。
関連
-
[解決済み] Ruby プログラムに一定時間待つように指示する
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み] Rubyからシェルコマンドを呼び出す方法
-
[解決済み] Ruby/RailsでHashからキーを削除して残りのHashを取得する方法は?
-
[解決済み] RVM (Ruby Version Manager) をシステムから削除する方法
-
[解決済み] Rubyのブロックから抜け出すには?
-
[解決済み] ルビーです。インスタンスからクラスメソッドを呼び出す
-
[解決済み】パス名やファイル名から不正な文字を削除するには?
-
[解決済み】nodejsは絶対パスからファイル名を取得しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] なぜsumはinject(:+)よりもずっと速いのですか?
-
[解決済み] Rubyの理想的なプロジェクト構造
-
[解決済み] Rubyの"==="演算子は何をするのですか?重複] [重複
-
[解決済み] 最大値のハッシュのキーはどのように見つけるのですか?
-
[解決済み] Ruby で改行せずに印刷する方法
-
[解決済み] 文字列内の複数の空白と改行を削除する
-
[解決済み] Rubyで配列を一度に初期化するには?
-
[解決済み] Rubyで2つの配列のマージとインターリーブ
-
[解決済み] Rubyの基本的なプロジェクトはどのように設定するのですか?
-
[解決済み] RubyでDateTime.nowをUTCに変換するには?