该nice
命令允许您调整程序的调度优先级(“niceness”)。在我使用过的所有类 Unix 系统上,niceness 由一系列整数指定,其中 -20 是最有利的调度优先级,0 是默认值,19 是最不利的。
将 0 作为默认的 niceness 已经足够直观了,但是为什么选择 -20 和 19 作为范围的端点呢?为什么不是 -128 和 127,它们完全适合有符号的 8 位字节?或者为什么不从 -100 到 100,这对小数点的人来说更直观,或者类似但更符合人体工程学,-99 到 99?-20 到 19 范围是任意选择的,还是nice
与最初与之交互的调度程序的内部结构有某种关系?(我知道今天没有这种关系,至少对于 Linux,它的调度程序使用 0 到 139 范围内的优先级。但是,我对 -20 到 19 范围的历史原因很感兴趣。)
shell 脚本需要做的最常见的事情之一是创建和操作临时文件。这样做安全是一种痛苦,因为你需要避免名称冲突,避免竞争条件,确保该文件具有正确的权限,等等(参见GNU Coreutils的手册和琐碎的博客文章这方面的迹象对这些更详细的讨论问题。)大多数类 Unix 操作系统通过提供mktemp
处理所有这些问题的命令来解决这个问题。但是,这些mktemp
命令的语法和语义没有标准化。如果您真的想安全且可移植地创建临时文件,则必须求助于丑陋的杂物,例如以下内容:
tmpfile=$(
echo 'mkstemp(template)' |
m4 -D template="${TMPDIR:-/tmp}/baseXXXXXX"
) || exit
Run Code Online (Sandbox Code Playgroud)
(此变通方法利用了宏处理器m4
是 POSIX 的一部分这一事实,并m4
公开了mkstemp()
同样由 POSIX 定义的 C 标准库函数。)
鉴于这一切,为什么 POSIX 没有标准化一个mktemp
命令,保证它的存在和至少它行为的某些方面?这是 POSIX 委员会的一个明显疏忽,还是委员会mktemp
实际上已经讨论了标准化的想法并因某些技术或其他原因被拒绝?
在 Bash 中,偶尔我会输入一个命令列表并点击Enter,然后才意识到列表末尾附近的某个命令有错误。我知道如果我按Ctrl+C它将终止当前正在运行的命令并取消列表的其余部分。有没有办法在不终止当前运行的命令的情况下取消列表的其余部分?
例如,假设我输入了类似
foo; bar
Run Code Online (Sandbox Code Playgroud)
或者
foo && bar
Run Code Online (Sandbox Code Playgroud)
wherefoo
是一个长时间运行的命令,不要中断非常重要,并且会bar
执行一些不可逆和不需要的操作(例如,shutdown -h now
或rm -rf /
)。在foo
仍在运行时,是否有一种通用的方法可以告诉外壳让foo
完成但bar
之后不运行?(是的,我可以更改权限bar
,使其不可执行,但如果我想同时使用bar
类似的东西,这不是特别方便rm
,如果我不拥有bar
或者bar
是内置的,它也不会工作。)
我偶尔会得到 tarball,其中文件名以 ISO-8859-1 或其他一些 pre-Unicode 方案编码。我的系统使用 UTF-8,所以当我使用常用选项 ( tar xvf foo.tar
)解压这些档案时,我最终会得到一个充满 mojibake 文件名的目录。
到目前为止,我一直在使用在提取convmv
文件名后将文件名转换为 UTF-8 。这有点不方便,因为我要么需要convmv
在每个受影响的文件上调用,要么将文件解压缩到一个新目录中,convmv
在整个目录上运行,然后将文件移动到我最初想要它们的位置。如果没有将此功能编码到 shell 脚本中,是否有某种方法可以将存档文件名即时转换为 UTF-8,因为它们正在解压缩?
bash ×1
command-line ×1
filenames ×1
history ×1
job-control ×1
mktemp ×1
nice ×1
posix ×1
priority ×1
scheduling ×1
shell-script ×1
tar ×1
unicode ×1