根据这个参考手册:
-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应该的工作方式类似于上面的代码?或者,最有可能的是,我误读了它?
是否可以将命令块视为匿名函数?
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?
我认为以下是桌面(非服务器)上传出 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。这对我来说似乎违反直觉(因为我仍在学习)。
是否可以同时搜索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) 我已经看到 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)
命令方块。我已经尝试了我能想到的所有方法,但我不知道下一步该去哪里。
我有两个区域:(lan类型:桥)和wan.
我将防火墙设置为从lanto转发wan。
lan 区域:输入:接受,输出:接受
wan 区域:输入:拒绝,输出:接受
将INPUT用于wan适用于数据包从刚刚上网?或者它是否包括从该lan区域转发的数据包?
我知道udevadm info将磁盘的 devtype 提供为disk. 但是,我如何获得 USB wifi 适配器的 devtype?(即wlan,wwan等)