【问题标题】:How do I create a file using sudo and write into it?如何使用 sudo 创建文件并写入文件?
【发布时间】:2014-07-10 18:01:05
【问题描述】:

我创建了一个 bash 脚本文件:

#!/bin/bash
default_card=`head -1 /proc/asound/modules`
echo $default_card

if [ ! -e /etc/modprobe.d/sound.blacklist.conf ] ; then
   echo "Default sound card(snd_hda_intel) is not added in black list"
/usr/bin/expect <<delim
exp_internal 0
set timeout 20
spawn sudo sh -c "echo 'blacklist snd_hda_intel' >  /etc/modprobe.d/sound.blacklist.conf"
expect "password for ubuntu:"
send "1234\n"      
expect eof 
delim
else
   echo "Default sound cardis already added in black list";
fi

我正在“/etc/modprobe.d”中创建一个黑名单文件。从“/etc”创建或删除任何文件都需要sudo 访问权限。

我想使用 Rake 任务在 Ruby 中实现相同的功能。我将任务创建为:

desc "Check/creates soundcard blacklist"
task :create_blacklist do
  begin
    if !File.exists?("/etc/modprobe.d/sound.blacklist.conf")
      # code for creating new file and write into it
      ......
      ......
    else
      puts "Sound-card blacklist file is present at /etc/modprobe.d/sound.blacklist.conf"
    end
  rescue Exception => e
    puts "problem creating file #{e.message}"
  end
end

我不知道如何使用 sudo 创建新文件并写入。

我使用的是 Ruby 1.9.3(没有 RVM)。

【问题讨论】:

    标签: ruby ruby-1.9.3 ruby-1.9


    【解决方案1】:

    查看https://stackoverflow.com/a/18366155/128421https://stackoverflow.com/a/18398804/128421 和“communicating w/ command-line program (OR ruby expect)”了解更多信息。

    Ruby 的 IO 类实现了expect,但功能不是太全:

    === 从 IO 实现 -------------------------------------------------- ---------------------------- IO#expect(pattern,timeout=9999999) -> 数组 IO#expect(pattern,timeout=9999999) { |result| ... } -> 无 -------------------------------------------------- ---------------------------- 从 IO 读取,直到给定模式匹配或超时结束。 它返回一个带有读取缓冲区的数组,然后是匹配项。如果一个块 给出,结果被产生到块并返回 nil。 当在没有块的情况下调用时,它会等待直到输入与给定的匹配 模式是从 IO 或指定的超时时间获得的。 从 IO 获取模式时返回一个数组。首先 数组的元素是从 IO 获得的整个字符串,直到 模式匹配,后跟指示哪个模式的元素 匹配正则表达式中的锚点。 可选的 timeout 参数以秒为单位定义等待的总时间 模式。如果超时到期或找到 eof,则返回 nil 或 产生了。但是,超时会话中的缓冲区保留用于下一个期望 称呼。默认超时为 9999999 秒。

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 2019-08-03
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 2013-08-17
      • 1970-01-01
      相关资源
      最近更新 更多