如果我从脚本运行这些命令:
#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中定义的环境变量?
有没有办法找出当前会话用户是否正在运行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)
但我正在寻找一种脚本方式.
我想询问是否可以通过引用将参数传递给脚本函数:
即在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) 我在一些代码中注意到了一段时间的以下语法:
if( NULL == var){
//...
}
Run Code Online (Sandbox Code Playgroud)
要么
if( 0 == var){
//...
}
Run Code Online (Sandbox Code Playgroud)
和类似的事情.
有人可以解释为什么写这个的人选择这种符号而不是常用的var == 0方式)?
这是一种风格问题,还是以某种方式影响性能?
我意识到这可能是一个天真的问题,但我仍然无法弄清楚如何在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
我有一段时间没有完成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'中声明的受保护成员
派生类不应该访问受保护的成员吗?
我错过了什么?
在Ruby中,我们有'bang'方法capitalize!,nil如果没有对字符串进行任何更改,则返回a的奇怪行为.
这意味着我无法将这些命令与其他命令链接,因为它会在返回时有效地销毁链nil.
我试图做的是这样的:
fname = fullname[0...fullname.index(' ')].capitalize!
Run Code Online (Sandbox Code Playgroud)
它从字符串中提取名字,也应该将其大写.但如果它已经大写,那么存储的字符串fname就是nil.
在课程中,我可以添加另一个声明但是想知道是否有办法做到这一点"不破坏链条".
有人可以帮助解释以下内容:
如果我输入:
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"
我正在构建的目标驱动程序不是本机驱动程序,而是使用Microsoft Universal Pinter Driver的微型驱动程序
根据DDK:
这些项目的描述[我的情况下的字体]被放置在资源DLL中,如Platform SDK文档中所述.
然后继续说:
在打印机的资源DLL中,使用RC_UFM资源类型指定.ufm文件,并使用RC_FONT资源类型指定.ifi文件.
尽管引用了SDK,但没有关于如何在资源dll中实际放置.ifi字体信息的信息.
任何人都可以指出一种方法来做到这一点?
编辑
是的,打印机包含常驻字体,我需要创建一个描述它们的资源文件.
到目前为止,我遇到了另一个障碍,因为显然你必须编译到你的资源dll的字体描述文件.ifi(即使DDK说他们可以),他们只是不工作.但它可以找到.ufm字体描述文件.问题是我们只有ifi文件描述设备字体但没有umf ...
有什么建议?
我注意到使用任务管理器,以下代码中有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