这是一个shell脚本:
globvar=0
function myfunc {
let globvar=globvar+1
echo "myfunc: $globvar"
}
myfunc
echo "something" | myfunc
echo "Global: $globvar"
Run Code Online (Sandbox Code Playgroud)
调用时,会打印出以下内容:
$ sh zzz.sh
myfunc: 1
myfunc: 2
Global: 1
$ bash zzz.sh
myfunc: 1
myfunc: 2
Global: 1
$ zsh zzz.sh
myfunc: 1
myfunc: 2
Global: 2
Run Code Online (Sandbox Code Playgroud)
问题是:为什么会发生这种情况,哪种行为是正确的?
PS我有一种奇怪的感觉,管道后面的功能是在一个分叉的shell中调用的......那么,有一个简单的解决方法吗?
PPS此功能是一个简单的测试包装器.它运行测试应用程序并分析其输出.然后它增加$ PASSED或$ FAILED变量.最后,您将在全局变量中获得许多通过/失败的测试.用法如下:
test-util << EOF | myfunc
input for test #1
EOF
test-util << EOF | myfunc
input for test #2
EOF
echo "Passed: $PASSED, failed: $FAILED"
Run Code Online (Sandbox Code Playgroud) 有没有办法用Go语言创建unix FIFO?没有Mkfifo,也没有Mknod在os包装,虽然我预期命名的FIFO在很大程度上是在POSIX操作系统的使用.实际上,有一个用于创建未命名的FIFO(管道)的功能,但没有用于创建命名管道的功能.
我是唯一需要它们的人吗?
嗯,这实际上不是一个问题..
我偶尔发现有一种有趣的方法可以在switch/case块中声明局部变量.您可以编写:而不是在每个案例块中使用大括号
switch (action) {
int res;
int value;
case ACTION_OPEN:
res = open(...);
...
break;
case ...
}
Run Code Online (Sandbox Code Playgroud)
那么,我只是想知道除了gcc之外还有哪些C/C++编译器支持这种结构?它看起来像是一种常见的堕落.欢迎任何关于这种结构的评论!
有一个shell脚本(/ bin/sh,而不是bash)需要root权限才能执行.
如果它由普通用户运行,它应该询问用户密码以获得root访问权并重新运行.
现在它使用以下代码:
if [ $(id -u) -ne 0 ]; then su root -- $0 $@ ; ... fi
这工作正常,但有一些像Ubuntu的操作系统根本没有root密码.另一方面,许多系统使用sudo进行root权限.
问题是:脚本如何检测是否使用su或sudo不要求用户输入太多密码(例如输入sudo密码,如果失败 - 运行su).
我知道,这一定是个愚蠢的问题.假设我有一个使用autotools构建系统的库.我有所有的configure,configure.ac,Makefile.am,config.h并可能在我的项目的根文件夹的其他文件.其中一些是由开发人员编写的,另一些是由autotools生成的.
问题是:如果我使用版本控制系统(在我的情况下 - hg) - VCS应该跟踪哪些autotools文件,哪些不应该(hgignore'd)?
谢谢,塞尔