我知道 bash 非常努力地保持新版本与旧版本兼容。
然而他们有时会引入(虽然很小,但仍然)重大的变化:
例如,当我们不再拥有: { foo }
#现在挂起
但必须有: #即在结束前{ foo ;}
有一个或换行符;
}
(不确定哪个版本引入了这一点,那是 20 多年前的事了 ^^)
我的问题是:如何找出在整个 bash 更新历史中发生了哪些其他“重大”变化?
我知道 bash 非常努力地保持新版本与旧版本兼容。
然而他们有时会引入(虽然很小,但仍然)重大的变化:
例如,当我们不再拥有: { foo }
#现在挂起
但必须有: #即在结束前{ foo ;}
有一个或换行符;
}
(不确定哪个版本引入了这一点,那是 20 多年前的事了 ^^)
我的问题是:如何找出在整个 bash 更新历史中发生了哪些其他“重大”变化?
测试用例:(使用非 root 用户,因为 root 会忽略 000 权限...)
#in a clean directory:
[ -f file_1 ] && chmod 600 file_? # for repeat tests...
for i in file_1 file_2 file_3; do
printf 'A\nB\n' > "$i"
# we need at least 1 char : awk/gawk silently skips empty files...
done
chmod 000 file_2
awk '(FNR==1) { print FILENAME }' file_?
# tried with : regular (old unixes) awk on AIX. and gawk on Linux.
# the fatal "permission denied" on file_2 stops [g]awk.
有没有办法捕获该致命错误并继续处理下一个文件?
(否则我觉得这很令人担忧:对一堆文件使用 awk 并不能保证处理所有文件,因为如果其中任何一个文件不可读,它将致命地退出)
如果可以的话请:回答