小编dgo*_*o.a的帖子

使用“-o errtrace”(即设置-E)捕获命令替换中的错误

根据这个参考手册

-E(还有 -o errtrace)

如果设置,则 ERR 上的任何陷阱都由 shell 函数、命令替换和在子 shell 环境中执行的命令继承。在这种情况下,ERR 陷阱通常不会被继承。

但是,我必须错误地解​​释它,因为以下不起作用:

#!/usr/bin/env bash
# -*- bash -*-

set -e -o pipefail -o errtrace -o functrace

function boom {
  echo "err status: $?"
  exit $?
}
trap boom ERR


echo $( made up name )
echo "  ! should not be reached ! "
Run Code Online (Sandbox Code Playgroud)

我已经知道简单的赋值,my_var=$(made_up_name), 将退出脚本set -e(即 errexit)。

-E/-o errtrace应该的工作方式类似于上面的代码?或者,最有可能的是,我误读了它?

bash command-substitution

15
推荐指数
2
解决办法
7680
查看次数

将代码块作为匿名传递。功能

是否可以将命令块视为匿名函数?

function wrap_this {
   run_something
   # Decide to run block or maybe not.
   run_something else
}

wrap_this {
   do_something
   do_somthing else
}

# Do something else

wrap_this {
   do_something_else_else
   do_something_else_else_else
}
Run Code Online (Sandbox Code Playgroud)

(我意识到您为每个块创建了一个函数或文件,但我发现此选项在某些情况下更清晰易读。)

while用做它do/done,并function与它做{ multiple lines }。我意识到 BASH 没有匿名函数,但是是否可以将多个命令传递给另一个函数,就像在定义函数或while?

bash function

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

为什么必须使用 iptables 授权环回流量才能访问网络?

我认为以下是桌面(非服务器)上传出 HTTP 所必需的:

iptables -A INPUT  -p tcp -m multiport --sports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

但是,事实证明我需要这两个才能使它工作。我不知道为什么:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

我知道最后一条规则允许 UDP 到lo接口。

但是,我认为我需要的只是outgoing TCP for NEW/ESTABLISHED connections+ incoming TCP for ESTABLISHED connections。这对我来说似乎违反直觉(因为我仍在学习)。

iptables

7
推荐指数
3
解决办法
2万
查看次数

如何与xdotool结合条件?

是否可以同时搜索xdotool--class--nameusing xdotool?

xdotool search --all --onlyvisible --class "some_val" --name "another val"
Run Code Online (Sandbox Code Playgroud)

上面返回一个错误,因为第一个条件--class已经返回了窗口 ID,然后才--name可以用来过滤结果:

 xdotool: Unknown command: --name
Run Code Online (Sandbox Code Playgroud)

xdotool

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

您如何在没有它的 shell 中实现进程替换(使用 bash 脚本)?

我已经看到 Fish shell 将进程替换作为一个函数来实现:

# === Fish shell lang:
function psub
   mkfifo $the_pipe
   cat >$the_pipe &
   echo $the_pipe
   # remove pipe when bg job is done
end  

# Example:
diff (echo abc | psub)  (echo def | psub)
Run Code Online (Sandbox Code Playgroud)

完整代码:https : //github.com/fish-shell/fish-shell/blob/master/share/functions/psub.fish

我已经尝试了几个小时为非鱼壳 (mksh) 重新实现它,但无法做到:

# Executable file:  my.psub.sh
the_pipe="$(mktemp /tmp/pipe.XXXXXXXXXX)"
mkfifo $the_pipe
cat >$the_pipe &
echo $the_pipe

# Example:
diff $(echo abc | my.psub.sh)  $(echo def | my.psub.sh)
Run Code Online (Sandbox Code Playgroud)

命令方块。我已经尝试了我能想到的所有方法,但我不知道下一步该去哪里。

process-substitution mksh

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

什么类型的流量适用于“WAN”区域的“INPUT”?

我有两个区域:(lan类型:桥)和wan.

我将防火墙设置为从lanto转发wan

lan 区域:输入:接受,输出:接受

wan 区域:输入:拒绝,输出:接受

INPUT用于wan适用于数据包从刚刚上网?或者它是否包括从该lan区域转发的数据包?

openwrt lede

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

是否可以获取 USB wifi 设备的 devtype?

我知道udevadm info将磁盘的 devtype 提供为disk. 但是,我如何获得 USB wifi 适配器的 devtype?(即wlanwwan等)

wifi udev

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