【发布时间】:2013-02-04 15:28:35
【问题描述】:
我有一些创建 Session 对象的简单代码(使用 session gem) 运行一些 shell 命令。我在同一个 BEGIN 块中多次使用 sudo,并且在每个命令上都会提示我输入 sudo 密码。我相信只应在创建 Session 后第一次询问,然后重用会话以避免这种情况。
#!/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
如何让sudo密码提示只出现一次?
【问题讨论】:
-
对不起,如果我没有完全理解问题,但是以超级用户身份调用 整个脚本 怎么样,这样就不需要
sudos 在里面了?我的意思是sudo ./your_file.rb而不是./your_file.rb? -
+1 @NIA,首选使用
sudo调用脚本。该脚本可以检查以查看它正在运行的有效用户和实际用户,如果它没有正确的权限,则会中止并报错。 -
好吧,我从另一个程序员那里接手了一个项目,他警告我不应该这样调用整个脚本,因为他遇到了使文件系统可用于 Web 服务器的问题。我不知道更多,但我想我需要尝试一下,看看会发生什么。谢谢。