目前我必须完成一门课程的一些 coreutils 命令的写作,而且我想不出一个小实际代码示例的起点来演示stdbuf. 有没有人用它来修复几个特定的 unix 命令的交互?我知道它的作用。只是想到的第一个命令有自己的缓冲控制,而正常的终端输出无论如何都是行缓冲的。附加到日志一定很流行,但我找不到一个好的命令来演示。
在 的情况下nohup,是否有任何通常与其一起运行以防止中断的命令?
正如我所提到的,我目前正在为一个课程作业做这件事。然而,这并不违反其任何规则。我只是想为这些示例找到一个好的起点。我没有一个 for stdbuf,而且我不喜欢我用于nohup.
可install用于安装符号链接而无需取消引用和安装目标文件 - 这似乎是一个不寻常的遗漏?
drwxrwxr-x 2 greg greg 4096 Aug 20 10:46 .
drwxrwxr-x 4 greg greg 4096 Aug 20 10:40 ..
lrwxrwxrwx 1 greg greg 4 Aug 20 10:46 stest -> test
-rw-rw-r-- 1 greg greg 0 Aug 20 10:40 test
$ mkdir target
$ install test target/test
$ install stest target/stest
$ ls -la target/
total 8
drwxrwxr-x 2 greg greg 4096 Aug 20 10:46 .
drwxrwxr-x 3 greg greg 4096 Aug 20 10:46 ..
-rwxr-xr-x 1 …Run Code Online (Sandbox Code Playgroud) 在我的家用电脑(Xubuntu 14.04)上,我有
zev@home:~$ 日期 +%F 2015-10-05 zev@home:~$ date +%F -d "下周一" 2015-10-12
而在工作中(Red Hat 5.11),我有
zev@work:~$ 日期 +%F 2015-10-05 zev@work:~$ date +%F -d "下周一" 2015-10-05
(请注意,今天是星期一。)我最初的猜测是,对该短语的不同解释next Monday是由于系统具有不同版本的 coreutil date:
zev@home:~$ 日期 --version | 头-2 日期 (GNU coreutils) 8.21 版权所有 (C) 2013 Free Software Foundation, Inc. zev@work:~$ 日期 --version | 头-2 日期 (GNU coreutils) 5.97 版权所有 (C) 2006 Free Software Foundation, Inc.
我的问题是:
date程序版本的差异是唯一的原因,还是系统中是否有其他因素会影响其对日期字符串的解释?
在不运行命令直接检查的情况下,我如何知道系统是否会有一种解释?如果唯一影响结果的是 的版本date,那么根据这个 unix.SE 线程(X 的哪个版本引入了特性 Y?),我应该能够在date程序的变更日志中找到哪个版本引入了新行为,但我在这里 …
该shuf命令有一个--output标志,您可以使用它来指定将其输出写入何处(而不是写入 stdout)。
我想就地随机播放文件。shuf file --output file使用相同的文件名作为输出文件名和要读取的文件是否安全?
或者这会导致文件损坏吗?它是特定于平台的吗?当我在一个小文件上进行测试时,它似乎工作正常,但是手册页没有说明这一点,我不确定是否要担心。
在echo中coreutils似乎是无处不在的,但不是每个系统都会有它在同一个地方(一般/bin/echo)。在echo不知道它在哪里的情况下调用它的最安全方法是什么?
如果echo系统上不存在coreutils二进制文件,我对命令失败感到满意——这比回显与我想要的不同。
注意:这里的动机是找到echo二进制文件,而不是找到一组参数,其中每个 shell 的echo 内置函数都是一致的。例如,似乎没有一种方法可以通过内置的 echo 安全地打印连字符,而不知道您是否在zsh或 中bash。
该dd 手册是在这个非常有限的:`
status=LEVEL
The LEVEL of information to print to stderr; 'none' suppresses
everything but error messages, 'noxfer' suppresses the final
transfer statistics, 'progress' shows periodic transfer
statistics
Run Code Online (Sandbox Code Playgroud)
这并没有说明实际输出,当我复制一个大图像文件时,它看起来像这样,例如:
dd if=input.img of=output.img status=progress
结果是:
到目前为止的传输速度和复制时间是显而易见的,但前三个数字是什么意思?
我在一些网站上读到了 coreutils 附带的 grep(例如https://wiki.archlinux.org/index.php/Core_Utilities)
但是,在构建它们之后,我注意到 grep 丢失了。我想知道我是否错误地构建了 coreutils。如果 grep 不是 coreutils 的一部分,那么排除它的理由是什么?
我错误地创建了一个名为 : 的文件--append。
如何删除它?
简单地输入通常的命令rm -f --append, 是行不通的。
我想创建一个多行文本的表格显示,类似于以下内容:
all Build all targets
document Create documentation of source files in the subfolders
`src` and `script`, and write it to `man`
test Run unit tests
Run Code Online (Sandbox Code Playgroud)
目前,我对此的输入如下所示,但这当然可以更改:
all---Build all targets
document---Create documentation of source files in the subfolders `src` and `script`, and write it to `man`
test---Run unit tests
Run Code Online (Sandbox Code Playgroud)
我已经尝试通过awk和wrap/的组合来实现这一点,pr但是虽然换行有效,但缩进却没有。这是我目前的方法:
…
| awk -F '---' "{ printf '%-10s %s\n', $1, $2 }" \
| fold -w $(($COLUMNS - 1)) -s
Run Code Online (Sandbox Code Playgroud)
它生成输出
all Build …Run Code Online (Sandbox Code Playgroud) 有没有办法只用 find 命令在文件名前加上一个字符串?
所以这个:
201a.txt
201b.png
...
Run Code Online (Sandbox Code Playgroud)
变成这样:
foo_201a.txt
foo_201b.png
...
Run Code Online (Sandbox Code Playgroud)
这个:
find . -name '201*' -execdir mv {} foo_{} \;
Run Code Online (Sandbox Code Playgroud)
不起作用,因为该{}部分包含./文件名中的前导,因此尝试写入foo_./201*.
如果仅使用 find 无法做到这一点,那么将字符串添加到文件名的最便携(阅读:只有 coreutils,没有 shell 脚本,最容易理解)的方法是什么?