Многие ответы сосредоточены на том, как заставить ваше решение работать, в то время как очень немногие предполагают, что ваше решение - очень плохой подход . Если вы действительно хотите «практиковаться, чтобы учиться», почему бы не практиковаться, используя хорошие решения? Жесткое кодирование вашего пароля изучает неправильный подход!
Если вы действительно хотите получить пароль без пароля mount
для этого тома, возможно, sudo
не требуется в все ! Могу ли я предложить другие подходы?
Использовать /etc/fstab
как mensi . Используйте опции user
и noauto
, чтобы позволить обычным пользователям монтировать этот том.
Используйте Polkit
для действий без пароля: настройте файл .policy
для своего скрипта с помощью
и перейдите в /usr/share/polkit-1/actions
Редактируйте /etc/sudoers
для разрешите вашему пользователю использовать sudo
без ввода пароля.
Все вышеперечисленное допускает привилегии root без пароля, ни одно из них не требует от вас жесткого пароля. Выберите любой подход, и я могу объяснить его более подробно.
Что касается , почему очень плохая идея жестко кодировать пароли, вот несколько хороших ссылок для дальнейшего чтения:
Просто поместите то, что вы хотите, в цикл диапазона и используйте массив Date :: MONTHNAMES, например,
(date.year..laterdate.year).each do |y|
mo_start = (date.year == y) ? date.month : 1
mo_end = (laterdate.year == y) ? laterdate.month : 12
(mo_start..mo_end).each do |m|
puts Date::MONTHNAMES[m]
end
end
Следующий код добавит метод экземпляра month_between к классу Date
#!/usr/bin/ruby
require 'date'
class Date
def self.months_between(d1, d2)
months = []
start_date = Date.civil(d1.year, d1.month, 1)
end_date = Date.civil(d2.year, d2.month, 1)
raise ArgumentError unless d1 <= d2
while (start_date < end_date)
months << start_date
start_date = start_date >>1
end
months << end_date
end
end
. Это ОЧЕНЬ мало проверено, однако он возвращает массив дат, каждая дата является 1-м днем каждого затронутого месяца.
Я не знаю, полностью ли я понял вашу проблему, но некоторые из следующего могут быть полезны. Я воспользовался преимуществами расширений Date, представленных в ActiveSupport:
d1 = Date.parse("20070617") # => Sun, 17 Jun 2007
d2 = Date.parse("20090529") #=> Fri, 29 May 2009
eom = d1.end_of_month #=> Sat, 30 Jun 2007
mth_ends = [eom] #=> [Sat, 30 Jun 2007]
while eom < d2
eom = eom.advance(:days => 1).end_of_month
mth_ends << eom
end
yrs = mth_ends.group_by{|me| me.year}
В последней строке используется еще одно удобное расширение: Array # group_by, которое делает в значительной степени именно то, что обещает.
d1.year.upto(d2.year) do |yr|
puts "#{yrs[yr].min}, #{yrs[yr].max}"
end
2007-06-30, 2007-12-31
2008-01-31, 2008-12-31
2009-01-31, 2009-05-31
Я не знаю, есть ли start / конечные точки соответствуют желанию, но вы сможете понять, что еще вам может понадобиться.
HTH