J'ai un code simple qui crée un objet Session (en utilisant le session gem) pour exécuter des commandes shell.) J'utilise sudo plusieurs fois dans le même bloc BEGIN et je reçois des invites commande pour le mot de passe sudo. Je crois qu'il ne devrait demander pour la première fois après la session est créée puis réutiliser la session pour éviter cela.Ruby Session génère toujours une nouvelle session (sudo)
#!/usr/bin/env ruby
require 'rubygems'
require 'date'
require 'mysql2'
require 'session'
begin
sh = Session::Shell.new
puts "Starting file system copy."
$WWW_ROOT = "~/Downloads/"
$MASTER='/git/library/dev/.git'
$DOMAIN = ARGV[1].to_s
$DOC_ROOT = [$WWW_ROOT, $DOMAIN].join
stdout, stderr = sh.execute ("cd #{$WWW_ROOT} && ls && sudo git clone -q #{$MASTER} #{$DOMAIN}")
if stderr.length > 0
puts stderr
puts 'Error on git cloning.'
else
puts stdout, stderr
puts "Git cloning finished."
end
stdout, stderr = sh.execute ("cd #{$DOC_ROOT} && sudo git checkout lib_dev")
if stderr.length > 0
puts stderr
puts 'Error on Git lib_dev checkout.'
else
puts stdout, stderr
puts "Git lib_dev checkout finished."
end
end
Comment puis-je faire le sudo mot de passe rapide seulement se produire une fois?
Désolé si je ne suis pas tout à fait Obtenir le problème, mais qu'en est-il d'invoquer le * script entier * en tant que superutilisateur, de sorte qu'il n'y aura pas besoin de 'sudo's à l'intérieur? Je veux dire 'sudo./Your_file.rb' au lieu de'./Your_file.rb'? – NIA
+1 @ NIA, l'utilisation de 'sudo' pour appeler le script est préférable. Le script peut vérifier si l'utilisateur effectif et réel est en cours d'exécution et abandonner avec une erreur s'il ne dispose pas des droits appropriés. –
Bien, je prends en charge un projet d'un autre programmeur et il m'a prévenu que le script global ne devrait pas être appelé ainsi parce qu'il a rencontré des problèmes avec le fait de rendre le système de fichiers utilisable avec le serveur web. Je ne sais pas plus que cela mais je suppose que je dois l'essayer et voir ce qui se passe. Merci. –