小编Ber*_*iri的帖子

你如何使用Ruby提示输入sudo密码?

我经常发现自己需要编写脚本,这些脚本必须作为普通用户执行某些部分,而其他部分则作为超级用户执行.我知道在SO上有一个类似的问题,答案是两次运行相同的脚本并将其作为sudo执行,但这对我来说还不够.有时我需要在sudo操作后恢复为普通用户.

我在Ruby中编写了以下内容来执行此操作

#!/usr/bin/ruby
require 'rubygems'
require 'highline/import'
require 'pty'
require 'expect'

def sudorun(command, password)
  `sudo -k`
  PTY.spawn("sleep 1; sudo -u root #{command} 2>&1") { | stdin, stdout, pid |
  begin
    stdin.expect(/password/) {
    stdout.write("#{password}\n")
    puts stdin.read.lstrip
                              }
  rescue Errno::EIO
  end
 }
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果用户输入错误的密码,则使用该代码会导致脚本崩溃.理想情况下,它应该让用户3尝试正确获取sudo密码.我该如何解决?

我在Linux Ubuntu BTW上运行它.

ruby linux command-line

7
推荐指数
2
解决办法
3639
查看次数

当嵌入式编译器没有运算符new或STL支持时,如何进行C++?

我正在为我的大学开展一个小组高级项目,并且在尝试使我的代码工作时遇到了一个主要障碍.

我们为8位Atmel微控制器提供的编译器不支持new或delete运算符,并且它不支持C++ STL.我可以用C编程,但是我必须实现一个我从未做过的A*算法.虽然我最初尝试过C,但我很快意识到我以前从未做过纯C.尝试使用结构和函数对对象进行建模正在减慢我的速度,因为我已经习惯了更清晰的C++语法.

无论如何,我的编译器缺点的确切措辞可以在这里找到:http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus

为了克服它们并仍然使用C++,我考虑了以下可能性.1)不要分配任何东西,只需使用模板在堆栈上生成固定数组.2)在为对象分配空间后,分配并找到一些hack来调用对象的构造函数.由于new不是运营商,因此不能选择新的展示位置.3)只需使用C并将其吸收,它是一个微控制器为什么我会变得喜欢?4)找到一个更好的编译器,可能会花费$$$.

第二种选择是最难的,但就我如何编写这段代码而言,它将获得最大的回报.但是,我想如果我弄错了调试它可能是一个巨大的痛苦.我正在考虑在堆栈上创建对象,将它们的位复制到分配的空间中,然后将对象中的位清零,这样它就不会调用它的析构函数.为此,我将使用unsigned char指针和sizeof运算符直接访问这些位以获取字节数.

这听起来很糟糕,我不知道它是否可以正常工作,但我正在考虑它.我知道vtable可能有问题,但我不打算使用任何vtable,因为它只是一个8位微控制器.

c c++ embedded microcontroller memory-management

6
推荐指数
3
解决办法
3078
查看次数

为什么JAXB不允许所有来自同一成员变量的getter上的注释?

为什么示例A工作,而示例B抛出"JAXB注释放在不是JAXB属性的方法上"异常?

我正在使用JAX-WS和Spring MVC.

例A

package com.casanosa2.permissions;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlType(name = "FooXMLMapper")
public class FooXMLMapper implements IFoo {

 @XmlElement
 private final boolean propA;

 @XmlElement
 private final boolean propB;

 public FooMapper(IFoo foo) {
  propA = foo.getPropA()
  propB = foo.getPropB()
 }

 public FooMapper() {
  propA = false;
  propB = false;
 }

 @Override
 public boolean getPropA() {
  return propA;
 }

 @Override
 public boolean getPropB() {
  return propB;
 }
}
Run Code Online (Sandbox Code Playgroud)

例B

@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlType(name = "FooXMLMapper")
public class FooXMLMapper …
Run Code Online (Sandbox Code Playgroud)

java cxf spring-mvc jax-ws jaxb

5
推荐指数
1
解决办法
2万
查看次数

Git不断删除组写入权限

我有一个 git 存储库,与几个开发人员共享。我们使用它定期进行 git pull 和 push。不幸的是,每次我执行 git pull 更改的文件时,都会失去组写入权限。我如何阻止 git 这样做?

我在 Ubuntu 12.04 LTS 上运行它。

共享存储库上的配置如下所示:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
        sharedRepository = group
Run Code Online (Sandbox Code Playgroud)

我还在它上面运行了以下命令以试图修复它

find repo.git -type d -exec chmod g+rws {} +
sudo chmod -R g+rw repo.git/objects
Run Code Online (Sandbox Code Playgroud)

不管我最终得到 755 的文件夹和 644 的文件,当我分别想要 775 和 664 时。

linux git file-permissions

5
推荐指数
1
解决办法
5581
查看次数

在Ubuntu Eee上编译内核需要什么?

我正在尝试按照教程在Linux中创建自定义USB驱动程序,我希望在使用g ++的Ubuntu Eee的Eee PC上开发这个东西.不幸的是,按照教程我需要linux/module.h头文件.根据我的理解,我将需要编译内核以使其工作.我以前从未编译过内核,我发现的所有指令都是针对桌面Ubuntu的.

我在我的Eee上这样做,因为如果我能在课堂上使用它并在课堂项目中使用它,我会在课堂上获得额外的学分.

我关注的教程如下:http://www.linuxjournal.com/article/7353 ,在这里:http://www.linuxjournal.com/article/4786

c++ linux ubuntu linux-device-driver linux-kernel

1
推荐指数
1
解决办法
774
查看次数

如何在Ubuntu服务器12.04 64中安装grunt-contrib-qunit?

我有一个带有以下npm dependancies的grunt项目:

  • 咕噜-的contrib-qunit
  • 咕噜-的contrib罗盘
  • 咕噜-的contrib-jshint

我在VirtualBox VM中创建了一个Ubuntu 12.04 64位服务器(来自Ubuntu主机),并运行以下命令:

sudo apt-get update
sudo apt-get install -y ruby rubygems gcc python make
sudo gem install compass

wget http://nodejs.org/dist/v0.10.15/node-v0.10.15.tar.gz
tar -xzf node-v0.10.15.tar.gz
cd node-v0.10.15/
./configure 
make
sudo make install
cd ../
rm -Rf node-v0.10.1
rm node-v0.10.15.tar.gz 

sudo npm install -g grunt-cli
Run Code Online (Sandbox Code Playgroud)

据说安装了npm.然后我使用git clone来克隆我在CentOS中使用的grunt项目(它在CentOS中都有效).不幸的是,当我运行grunt时尝试使用以下错误运行qunit失败:

运行"qunit:dist"(qunit)任务测试/home/testuser/myproject/test/index.html确定

运行PhantomJS ......错误

为了使此任务正常工作,必须通过NPM在本地安装PhantomJS.如果您看到此消息,通常这意味着NPM安装失败.请提交尽可能详细的问题:https: //github.com/gruntjs/grunt-lib-phantomjs/issues警告:未找到PhantomJS.使用--force继续.

因警告而中止.

我甚至从grunt文件夹运行了npm update,它仍然有这个错误.

我错过了什么?

编辑 请注意以下事实:

  1. 此项目在CentOS中无错误地运行.
  2. 这个项目使用--save-dev在本地安装了所有插件
  3. 通过手动安装每个依赖项来覆盖本地安装并不能解决此问题.
  4. 手动卸载并重新安装每个依赖项并不能解决此问题.

qunit ubuntu-12.04 gruntjs

0
推荐指数
1
解决办法
2293
查看次数