小编Wil*_*ell的帖子

使用diff忽略换行符

当我比较c源文件时,我想忽略换行符.例如,我想要跟随两个代码报告它们是相同的.

// codeA
int main(int argc, char *argv[]) 
{

// codeB
int main(int argc, char *argv[]) {
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以下选项,但无法获得结果.

diff -b codeA codeB
diff -w codeA codeB
Run Code Online (Sandbox Code Playgroud)

unix diff

12
推荐指数
2
解决办法
4746
查看次数

找不到输入文件时,如何最好地(惯用地)使 perl 脚本(使用 -n/-p 运行)失败?

$ perl -pe 1 foo && echo ok
Can't open foo: No such file or directory.
ok
Run Code Online (Sandbox Code Playgroud)

当文件不存在时,我真的希望 perl 脚本失败。当输入文件不存在时,使 -p 或 -n 失败的“正确”方法是什么?

perl

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

在shell脚本中添加使用内容而不使用getopts

我有脚本,我需要显示使用命令,以防用户在执行脚本时错过任何必要的信息.

Usage : Script -s <server> -i <instance> -u <user> -p <password> <query> -w <warning value> -c <critical value>
Run Code Online (Sandbox Code Playgroud)

随着所有的解释 OPTIONS

我从参数中得到的值如下变量时尚.但我希望在shell脚本中使用此验证.

SERVER=$1
INSTANCE=$2
USER=$3
DB_PASSWD=$4
QUERY=$5
VAL_WARN=$6
VAL_CRIT=$7
Run Code Online (Sandbox Code Playgroud)

我尝试过使用getopts,但由于在传递值之前<query>没有-q参数,因此无法使用.

我已经尝试找到所有其他方法,但每个人都建议getopts这对我来说不是可行的解决方案.

请帮我这个..

unix linux shell getopts

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

如何显示当前持有信号量的进程?

在用户空间Linux中,我在信号量上有一个阻塞进程,如strace所见.一旦出现错误情况,阻塞就是可重复的,因此必须有另一个进程来保存信号量并且不释放它.

有没有办法知道哪个其他进程当前持有信号量?

ipcs列出信号量,/ proc/sysvipc/sem也是如此.我在哪里可以找到有关持有过程的信息?

linux semaphore

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

为什么可以在 scanf 的转换说明符中嵌入空字符?

也许我误解了我的结果,但是:

#include <stdio.h>

int
main(void)
{
    char buf[32] = "";
    int x;
    x = scanf("%31[^\0]", buf);
    printf("x = %d, buf=%s", x, buf);
}
$ printf 'foo\n\0bar' | ./a.out
x = 1, buf=foo
Run Code Online (Sandbox Code Playgroud)

由于字符串文字"%31[^\0]"包含一个嵌入的空值,它似乎应该被视为与 相同"%31[^",并且编译器应该抱怨[是不匹配的。事实上,如果你替换字符串文字,clang 会给出:

warning: no closing ']' for '%[' in scanf format string [-Wformat]

为什么在传递给 scanf 的字符串文字中嵌入空字符会起作用?

- 编辑 -

以上是未定义的行为,只是碰巧“工作”。

c scanf

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

检查字符串是否包含星号(*)

我想检查我的字符串是否包含一个或多个星号.

我试过这个:

if [[ $date_alarm =~ .*\*.* ]]
then
    ...
fi
Run Code Online (Sandbox Code Playgroud)

它直接启动脚本时有效,但是如果在关机期间调用此脚本则不行(脚本通过update-rc.d安装在运行级别0和6中)

有什么想法,建议吗?

谢谢

linux string bash init

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

为什么逗号在C++可变参数函数声明中是可选的?

这两个声明有区别吗?

int foo( int a, ... );
Run Code Online (Sandbox Code Playgroud)

int foo( int a ... );
Run Code Online (Sandbox Code Playgroud)

如果没有差异,那么使第二个语法有效的重点是什么?

c++ syntax

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

写入文件的最后一个字符的"Backspace"

我有一个输出SQL文件的Python应用程序:

sql_string = "('" + name + "', " + age + "'),"
output_files['sql'].write(os.linesep + sql_string)
output_files['sql'].flush()
Run Code Online (Sandbox Code Playgroud)

这不是在for循环中完成的,而是在数据变得可用时写入.当应用程序运行完毕后,有没有办法在最后一个逗号字符上"退格",并用分号替换它?我确信我可以通过在换行符之前输出逗号来创建一些解决方法,并使用全局Bool来确定是否有任何特定的"写入"是第一次写入.但是,我认为如果我可以对它进行'退格',应用程序会更加清晰.当然,作为Python可能有这么简单的方法!

请注意,insert在此用例中,在列表中包含每个值行然后插入列表不是可行的解决方案.

python

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

管道中`$?`的正确值是多少?

我有点不安地发现以下行为:

bash$ false
bash$ true | echo $?
0
bash$ ksh
ksh$ false
ksh$ true | echo $?
0
ksh$ zsh
zsh$ false
zsh$ true | echo $?
1
Run Code Online (Sandbox Code Playgroud)

直观地说,看起来zsh是正确的,而bash和ksh是错误的. $?是,在每种情况下,应该是1.注意,"最近执行流水线的退出状态" false | echo $?两个也打印0 kshbash.是标准的灵活的在这一点上(即行为是不确定的),或者是bashksh不符合要求的吗?我也很想知道bash和ksh正在做些什么来解决这个问题.

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
Copyright (C) 2007 Free Software Foundation, Inc.
$ zsh --version
zsh 4.3.11 (i386-apple-darwin11.0)
$ ksh --version
  version         sh (AT&T Research) 1993-12-28 s+
Run Code Online (Sandbox Code Playgroud)

bash shell ksh zsh sh

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

在捕获中断后如何使Bash的读取中止?

考虑:

$ cat b.sh
#!/bin/bash

trap 'echo $$ was interrupted' INT
read foo
echo done
$ ./b.sh
^C27104 was interrupted
^C27104 was interrupted
^C27104 was interrupted
done
$ 
Run Code Online (Sandbox Code Playgroud)

(ctrl-c被击中3次,然后是ctrl-d)

我想read在执行陷阱后中止.有没有一种干净的方法来实现这一目标?

bash signals

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

标签 统计

bash ×3

linux ×3

shell ×2

unix ×2

c ×1

c++ ×1

diff ×1

getopts ×1

init ×1

ksh ×1

perl ×1

python ×1

scanf ×1

semaphore ×1

sh ×1

signals ×1

string ×1

syntax ×1

zsh ×1