小编zse*_*rge的帖子

在Bash中增加一个全局变量

这是一个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)

unix bash global increment

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

Unix FIFO在去?

有没有办法用Go语言创建unix FIFO?没有Mkfifo,也没有Mknodos包装,虽然我预期命名的FIFO在很大程度上是在POSIX操作系统的使用.实际上,有一个用于创建未命名的FIFO(管道)的功能,但没有用于创建命名管道的功能.

我是唯一需要它们的人吗?

unix pipe fifo go

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

在C开关/ case中声明变量

嗯,这实际上不是一个问题..

我偶尔发现有一种有趣的方法可以在switch/case块中声明局部变量.您可以编写:而不是在每个案例块中使用大括号

switch (action) {
  int res;
  int value;
case ACTION_OPEN:
  res = open(...);
  ...
  break;
case  ...
}
Run Code Online (Sandbox Code Playgroud)

那么,我只是想知道除了gcc之外还有哪些C/C++编译器支持这种结构?它看起来像是一种常见的堕落.欢迎任何关于这种结构的评论!

c c++ variables local switch-statement

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

su和sudo在shell脚本中

有一个shell脚本(/ bin/sh,而不是bash)需要root权限才能执行.

如果它由普通用户运行,它应该询问用户密码以获得root访问权并重新运行.

现在它使用以下代码:

if [ $(id -u) -ne 0 ]; then su root -- $0 $@ ; ... fi

这工作正常,但有一些像Ubuntu的操作系统根本没有root密码.另一方面,许多系统使用sudo进行root权限.

问题是:脚本如何检测是否使用susudo不要求用户输入太多密码(例如输入sudo密码,如果失败 - 运行su).

linux shell sudo su

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

Autotools和版本控制

我知道,这一定是个愚蠢的问题.假设我有一个使用autotools构建系统的库.我有所有的configure,configure.ac,Makefile.am,config.h并可能在我的项目的根文件夹的其他文件.其中一些是由开发人员编写的,另一些是由autotools生成的.

问题是:如果我使用版本控制系统(在我的情况下 - hg) - VCS应该跟踪哪些autotools文件,哪些不应该(hgignore'd)?

谢谢,塞尔

controls file version autotools

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

标签 统计

unix ×2

autotools ×1

bash ×1

c ×1

c++ ×1

controls ×1

fifo ×1

file ×1

global ×1

go ×1

increment ×1

linux ×1

local ×1

pipe ×1

shell ×1

su ×1

sudo ×1

switch-statement ×1

variables ×1

version ×1