小编Rom*_*n M的帖子

sed中的环境变量替换

如果我从脚本运行这些命令:

#my.sh
PWD=bla
sed 's/xxx/'$PWD'/'
...
$ ./my.sh
xxx
bla
Run Code Online (Sandbox Code Playgroud)

没事.

但是,如果我跑:

#my.sh
sed 's/xxx/'$PWD'/'
...
$ ./my.sh
$ sed: -e expression #1, char 8: Unknown option to `s' 
Run Code Online (Sandbox Code Playgroud)

我在教程中读到要替换你需要停止的shell中的环境变量,并且"引用"该$varname部分以便它不直接替换,这就是我所做的,并且只有在之前定义变量时才有效.

我怎样才能将sed识别$var为在shell中定义的环境变量?

unix linux shell sed

170
推荐指数
8
解决办法
22万
查看次数

如何检查X服务器是否正在运行?

有没有办法找出当前会话用户是否正在运行Xserver(在Linux下)?

我开始做的事情如下:

ps -e | grep X 
Run Code Online (Sandbox Code Playgroud)

但这并不总是有效

我尝试的另一件事是检查$DISPLAY变量

有没有其他方法来检查这个?

编辑:有人建议使用$ DISPLAY变量,但如果用户摆弄这个变量怎么办?如果他试图做某事并改变这个变量然后当我检查它时,它不再反映系统的准确状态.有没有具体的方法来做到总会得到正确的答案?

我发现它可以以编程方式完成:

#include <X11/Xlib.h> 
int main()
    { exit(XOpenDisplay(NULL) ? 0 : 1);  } 

$ gcc -o xprobe xprobe.c -L/usr/X11R6/lib -lX11 
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种脚本方式.

linux x11 xserver

59
推荐指数
6
解决办法
15万
查看次数

通过引用传递参数

我想询问是否可以通过引用将参数传递给脚本函数:

即在C中做一些看起来像这样的事情:

void boo(int &myint) { myint = 5; }

int main() {
    int t = 4;
    printf("%d\n", t); // t->4
    boo(t);
    printf("%d\n", t); // t->5
}
Run Code Online (Sandbox Code Playgroud)

那么在BASH我想做的事情如下:

function boo () 
{

    var1=$1       # now var1 is global to the script but using it outside
                  # this function makes me lose encapsulation

    local var2=$1 # so i should use a local variable ... but how to pass it back?

    var2='new'    # only changes the local copy 
    #$1='new'     this is wrong …
Run Code Online (Sandbox Code Playgroud)

bash shell scripting pass-by-reference

40
推荐指数
6
解决办法
4万
查看次数

为什么在变量之前将常量放在比较中?

我在一些代码中注意到了一段时间的以下语法:

if( NULL == var){
   //...
}
Run Code Online (Sandbox Code Playgroud)

要么

if( 0 == var){
  //...
}
Run Code Online (Sandbox Code Playgroud)

和类似的事情.

有人可以解释为什么写这个的人选择这种符号而不是常用的var == 0方式)?

这是一种风格问题,还是以某种方式影响性能?

c c++ syntax comparison

18
推荐指数
5
解决办法
6974
查看次数

在类中调用类方法

我意识到这可能是一个天真的问题,但我仍然无法弄清楚如何在Ruby类中调用另一个方法.

即在Ruby中可以执行以下操作:

class A
   def met1
   end
   def met2
      met1 #call to previously defined method1
   end
end
Run Code Online (Sandbox Code Playgroud)

谢谢,

R M

ruby

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

为什么我不能从派生类的实例访问受保护的成员?

我有一段时间没有完成C++,也无法弄清楚为什么以下不起作用:

class A {
protected:
  int num;
};

class B : public A {
};

main () {
  B * bclass = new B ();
  bclass->num = 1;
}
Run Code Online (Sandbox Code Playgroud)

编译它会产生:

错误C2248:'A :: num':无法访问在类'A'中声明的受保护成员

派生类不应该访问受保护的成员吗?

我错过了什么?

c++ inheritance

13
推荐指数
4
解决办法
3万
查看次数

Ruby'资本化!' 悖论

在Ruby中,我们有'bang'方法capitalize!,nil如果没有对字符串进行任何更改,则返回a的奇怪行为.

这意味着我无法将这些命令与其他命令链接,因为它会在返回时有效地销毁链nil.

我试图做的是这样的:

fname =  fullname[0...fullname.index(' ')].capitalize!
Run Code Online (Sandbox Code Playgroud)

它从字符串中提取名字,也应该将其大写.但如果它已经大写,那么存储的字符串fname就是nil.

在课程中,我可以添加另一个声明但是想知道是否有办法做到这一点"不破坏链条".

ruby

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

Bash Scripting - shell命令输出重定向

有人可以帮助解释以下内容:

如果我输入:

a=`ls -l`
Run Code Online (Sandbox Code Playgroud)

然后ls命令的输出保存在变量中 a

但如果我尝试:

a=`sh ./somefile`
Run Code Online (Sandbox Code Playgroud)

结果输出到shell(stdout)而不是变量a

我所期望的是shell尝试执行somefile存储在变量中的脚本的结果操作.

请指出我的理解有什么问题,以及可能的方法.

谢谢.

编辑:

只是为了澄清,脚本' somefile'可能存在也可能不存在.如果它存在,那么我希望脚本的输出存储在' a'中.如果没有,我想在' a'中存储错误消息"no such file or dir"

bash shell scripting

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

如何使资源DLL描述设备字体?

我正在构建的目标驱动程序不是本机驱动程序,而是使用Microsoft Universal Pinter Driver的微型驱动程序

根据DDK:

这些项目的描述[我的情况下的字体]被放置在资源DLL中,如Platform SDK文档中所述.

然后继续说:

在打印机的资源DLL中,使用RC_UFM资源类型指定.ufm文件,并使用RC_FONT资源类型指定.ifi文件.

尽管引用了SDK,但没有关于如何在资源dll中实际放置.ifi字体信息的信息.

任何人都可以指出一种方法来做到这一点?

编辑

是的,打印机包含常驻字体,我需要创建一个描述它们的资源文件.

到目前为止,我遇到了另一个障碍,因为显然你必须编译到你的资源dll的字体描述文件.ifi(即使DDK说他们可以),他们只是不工作.但它可以找到.ufm字体描述文件.问题是我们只有ifi文件描述设备字体但没有umf ...

有什么建议?

fonts drivers driver wdk device-driver

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

GDI泄漏问题

我注意到使用任务管理器,以下代码中有GDI泄漏.执行此代码的进程中GDI对象的计数每次执行时增加1,但我似乎无法找到问题.

任何帮助,将不胜感激.

// create new DC based on current    
HDC hDC = CreateCompatibleDC(GetDC());
// select a bitmap into the new DC and keep the old one
HGDIOBJ hOldObj = SelectObject (hDC,hBM);
// do somthing here --> 100% no leak here
SomeFunction (hDC);
// select the old object back from whence it came and delete whats returned   
DeleteObject (SelectObject (hDC,hOldObj));
// delete the DC
DeleteDC(hDC);
// delete the tmp object
DeleteObject (hOldObj);
Run Code Online (Sandbox Code Playgroud)

R M

c winapi gdi

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