小编Psy*_*aut的帖子

为什么niceness 的范围是-20 到 19?

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 范围的历史原因很感兴趣。)

scheduling priority history nice

24
推荐指数
2
解决办法
2445
查看次数

为什么 POSIX 中没有 mktemp 命令?

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实际上已经讨论了标准化的想法并因某些技术或其他原因被拒绝?

shell-script posix mktemp

18
推荐指数
2
解决办法
1320
查看次数

如何取消 Bash 中的其余命令列表?

在 Bash 中,偶尔我会输入一个命令列表并点击Enter,然后才意识到列表末尾附近的某个命令有错误。我知道如果我按Ctrl+C它将终止当前正在运行的命令并取消列表的其余部分。有没有办法在终止当前运行的命令的情况下取消列表的其余部分?

例如,假设我输入了类似

foo; bar
Run Code Online (Sandbox Code Playgroud)

或者

foo && bar
Run Code Online (Sandbox Code Playgroud)

wherefoo是一个长时间运行的命令,不要中断非常重要,并且会bar执行一些不可逆和不需要的操作(例如,shutdown -h nowrm -rf /)。在foo仍在运行时,是否有一种通用的方法可以告诉外壳让foo完成但bar之后不运行?(是的,我可以更改权限bar,使其不可执行,但如果我想同时使用bar类似的东西,这不是特别方便rm,如果我不拥有bar或者bar是内置的,它也不会工作。)

command-line bash job-control

10
推荐指数
1
解决办法
398
查看次数

以不同于文件系统中使用的编码的字符编码解压文件名

我偶尔会得到 tarball,其中文件名以 ISO-8859-1 或其他一些 pre-Unicode 方案编码。我的系统使用 UTF-8,所以当我使用常用​​选项 ( tar xvf foo.tar)解压这些档案时,我最终会得到一个充满 mojibake 文件名的目录。

到目前为止,我一直在使用在提取convmv文件名后将文件名转换为 UTF-8 。这有点不方便,因为我要么需要convmv在每个受影响的文件上调用,要么将文件解压缩到一个新目录中,convmv在整个目录上运行,然后将文件移动到我最初想要它们的位置。如果没有将此功能编码到 shell 脚本中,是否有某种方法可以将存档文件名即时转换为 UTF-8,因为它们正在解压缩?

tar character-encoding filenames unicode

8
推荐指数
1
解决办法
4723
查看次数