小编mus*_*hil的帖子

“trap ... INT TERM EXIT”真的有必要吗?

对于许多例子trap使用trap ... INT TERM EXIT的清理任务。但是真的有必要列出所有三个 sigspecs 吗?

手册上说

如果 SIGNAL_SPEC 为 EXIT (0),则在退出 shell 时执行 ARG。

我相信这适用于脚本是否正常完成或因为它收到SIGINTSIGTERM. 一个实验也证实了我的信念:

$ cat ./trap-exit
#!/bin/bash
trap 'echo TRAP' EXIT
sleep 3
$ ./trap-exit & sleep 1; kill -INT %1
[1] 759
TRAP
[1]+  Interrupt               ./trap-exit
$ ./trap-exit & sleep 1; kill -TERM %1
[1] 773
TRAP
[1]+  Terminated              ./trap-exit
Run Code Online (Sandbox Code Playgroud)

那为什么这么多例子一一列举INT TERM EXIT呢?或者我错过了什么,有没有鞋底EXIT会错过的情况?

shell bash signals trap

80
推荐指数
4
解决办法
7万
查看次数

默认分配的文件描述符3是什么?

$ ls -og /proc/self /proc/self/fd
lrwxrwxrwx 1 64 Jun 18 11:12 /proc/self -> 32157

/proc/self/fd:
total 0
lrwx------ 1 64 Jun 22  2012 0 -> /dev/tty1
lrwx------ 1 64 Jun 22  2012 1 -> /dev/tty1
lrwx------ 1 64 Jun 22  2012 2 -> /dev/tty1
lr-x------ 1 64 Jun 22  2012 3 -> /proc/32157/fd
Run Code Online (Sandbox Code Playgroud)

默认分配的文件描述符3是什么?

file-descriptors

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

组合多进程替换

假设你尝试过这样的事情:

$ paste ../data/file-{A,B,C}.dat
Run Code Online (Sandbox Code Playgroud)

并意识到您想在粘贴之前对每个文件进行排序(假设是数字)。然后,使用进程替换,您需要编写如下内容:

$ paste <(sort -n ../data/file-A.dat) \
        <(sort -n ../data/file-B.dat) \
        <(sort -n ../data/file-C.dat)
Run Code Online (Sandbox Code Playgroud)

在这里你会看到很多重复,这不是一件好事。因为每个进程替换都是相互隔离的,所以不能使用任何跨越多个进程替换的大括号扩展或路径名扩展(通配符)。

是否有一种工具可以让您以紧凑的方式(例如通过给予sort -n../data/file-{A,B,C}.dat单独)编写并为您编写整个命令行?

command-line bash process-substitution

6
推荐指数
1
解决办法
839
查看次数

如果前一个命令失败,则退出管道

我试图通过解析输出,检查运行和排队的PBS作业的数量qstat -tn1bash脚本。到目前为止,这已经奏效:

count ()
{
    qstat -tn1 | awk '
        BEGIN { R = 0; Q = 0; }
        $10 == "R" { R++ }
        $10 == "Q" { Q++ }
        END { print R, Q }'
}

if read -r R Q < <(count)
    ...
Run Code Online (Sandbox Code Playgroud)

但是,我看到qstat偶尔会因未知原因而失败。在这种情况下,它不会向 打印任何内容stdout和一些错误消息stderr,并以非零状态(相当标准)退出。但是,awk不知道qstat失败了,并且很高兴地打印0 0了它收到的空输入。然后read将 0 分配给两者,R并且Q不知道qstat实际上失败了。

  1. 我需要在脚本块中初始化RQ使用 …

linux scripting bash

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