Vérifier si un programme existe dans $path à partir de ruby

Créé le 13 Dec 2022 - Mis à jour le 04 Jul 2023 - Créé par Fabien Berthoux - rubyunix

Vérifier si un programme existe dans $PATH à partir de Ruby est très simple. La méthode File.exist? peut être utilisée pour vérifier si un fichier existe. Cela prend un argument de type chaîne et retourne true si le fichier existe, false sinon. La méthode prend également un argument facultatif qui est le répertoire à rechercher dans. Cependant, en omettant cet argument, la méthode recherche dans le répertoire actuel. La méthode $PATH peut être utilisée pour obtenir une liste des répertoires à rechercher. En itérant sur la liste, la méthode File.exist? peut être appelée pour chaque répertoire, ce qui permet de vérifier si le fichier existe dans l'un des répertoires de $PATH. Une fois trouvé, la recherche peut être arrêtée avec une instruction break.

if $PATH.any? { |dir| File.exist?(File.join(dir, program_name)) }
  puts "#{program_name} exists in $PATH"
else
  puts "#{program_name} does not exist in $PATH"
end

Comment vérifier si un programme existe dans un autre répertoire ?


Vous pouvez utiliser la méthode File.exist? et passer en argument le chemin du répertoire que vous souhaitez rechercher. Par exemple, pour vérifier si le fichier « foo.rb » existe dans le répertoire « bar », vous pouvez utiliser la méthode suivante :

File.exist?(File.join("bar", "foo.rb"))

Comment vérifier si un programme existe dans un sous-répertoire ?


Vous pouvez utiliser la méthode File.exist? et passer en argument le chemin du répertoire que vous souhaitez rechercher. Par exemple, pour vérifier si le fichier « foo.rb » existe dans le sous-répertoire « bar » du répertoire « baz », vous pouvez utiliser la méthode suivante :

File.exist?(File.join("baz", "bar", "foo.rb"))

Comment puis-je utiliser la méthode File.exist? pour vérifier si un programme existe dans plusieurs répertoires ?


Vous pouvez utiliser la méthode $PATH pour obtenir une liste de tous les répertoires à rechercher. Vous pouvez ensuite itérer sur cette liste et appeler la méthode File.exist? pour chaque répertoire. Par exemple, pour vérifier si le fichier « foo.rb » existe dans l'un des répertoires de $PATH, vous pouvez utiliser la méthode suivante :

if $PATH.any? { |dir| File.exist?(File.join(dir, "foo.rb")) }
  puts "foo.rb exists in $PATH"
else
  puts "foo.rb does not exist in $PATH"
end

Comment puis-je vérifier si un programme existe dans $PATH avant de l'exécuter ?


Vous pouvez utiliser la méthode File.exist? et passer en argument le chemin du répertoire que vous souhaitez rechercher. Vous pouvez ensuite itérer sur la liste $PATH et appeler la méthode File.exist? pour chaque répertoire. Si le fichier est trouvé, vous pouvez le lancer avec la méthode Kernel.exec. Par exemple, pour vérifier si le fichier « foo.rb » se trouve dans l'un des répertoires de $PATH et le lancer ensuite, vous pouvez utiliser la méthode suivante :

if $PATH.any? { |dir| File.exist?(File.join(dir, "foo.rb")) }
  Kernel.exec("foo.rb")
else
  puts "foo.rb does not exist in $PATH"
end