我在理解命令语法方面的选项和参数方面遇到了令人困惑的变化。
例如,我遇到了如下定义:
command -a -b -c d e f
有些在 之间有所不同-a -b -c,将它们称为选项或开关,d e f并将它们称为参数。
command -a -b -c d e f
有些,例如bash手册,调用所有-a -b -c d e f参数并解释说,它们都可以$1 $2 $3 $4 $5 $6分别从脚本中访问。
command -a b=c
有些调用-a一个选项,b一个参数和c值,但其他人像前两点一样将它们混合在一起,在一个变体中调用所有-a b c参数。
这三个版本只是大量不同调用变体的示例,我什至不知道如何将它们全部列出,但我注意到肯定没有固定的命名约定。
或者至少,我知道没有标准化的命名约定,因为我遇到了不同的随机来源,但即使在官方 Linux 和 GNU 附属站点或手册中,我也可能遇到这种不一致的情况。
有没有毫无疑问的官方命名方案可以参考?
我写了一个小 bash 脚本,它让我偶然发现了“2038 年错误”。我之前不知道这个问题--debug,date当我的脚本试图计算这个神奇的日期(2038 年 1 月 19 日 03:14:07 UTC)时,我只是敢于发布我得到的输出。
date -d "20380119"
date: parsed number part: today/this/now
date: input timezone: +01:00 (set from system default)
date: warning: using midnight as starting time: 00:00:00
date: starting date/time: '(Y-M-D) 2038-01-19 00:00:00 TZ=+01:00'
date: '(Y-M-D) 2038-01-19 00:00:00 TZ=+01:00' = 2147468400 epoch-seconds
date: output timezone: +01:00 (set from system default)
date: final: 2147468400.000000000 (epoch-seconds)
date: final: (Y-M-D) 2038-01-18 23:00:00 (UTC0)
date: final: (Y-M-D) 2038-01-19 00:00:00 (output …Run Code Online (Sandbox Code Playgroud) 我有一个包含大约 100,000 个文件的目录。ls -f 挂了超过一分钟。我运行了 strace,并立即开始看到 getdents,所以 ls 显然正在读取目录。我还看到很多对 brk 的调用,所以 ls 显然是在内存中缓冲内容。我编写了一个调用 readdir 并输出文件名的简单程序,它立即响应。但是 ls -f 不提供输出。是什么赋予了?我认为 -f 的全部意义在于它导致 ls 除了 readdir 什么都不做。是否有一种可移植、可靠的方法来列出目录的内容?(注意,这是来自 Linux 上 gnu 的 coreutils 的 ls。)
-编辑-
有一个别名,但是“/bin/ls -1f > /dev/null”需要 8 到 15 秒,“/bin/ls -1fx > /dev/null”需要 4 到 11 秒,但是一个简单的程序这只是 readdir 需要 0.011 秒。我需要做什么才能使 gnu ls 不烂?
直到本月,我的 shell 配置都非常简单(主要只是一个.bashrc或.bash_profile一些别名),但我一直在重构它,因此我可以根据我是否使用 zsh 和 bash 来获得不同的行为。他们首先提供一个通用的 shell 配置文件,该文件应该适用于任何情况,然后专门用于正在使用的特定 shell(我对此进行了符号链接)。
今天ls停止工作时我很惊讶。原来,在重构过程中.bashrc,有一个别名
alias ls='ls --color=always'
Run Code Online (Sandbox Code Playgroud)
这ls在 OSX 终端上的 bash 中破坏了东西。一旦我看到 BSDls喜欢-G颜色,但 GNU(或 Ubuntu 上的任何东西)喜欢--color,很明显有很多选项不同。
我的问题是,解决 BSD 和 GNU coreutils 之间的选项差异以及诸如此类差异的最佳方法是什么?我应该在if块中测试环境变量以查看正在使用的操作系统并应用正确的行为吗?还是为每个操作系统制作单独的配置文件更有意义?
虽然对这些问题的回答可能是主观的,但对 BSD 和 GNU coreutils 之间的差异范围的概述以及解决这些问题以使通用配置可用于大多数 *nix 的策略似乎是相当客观的。
我有兴趣了解 GNU 相关软件的文档是如何编写的,并且想知道他们的 PDF 文档中使用了什么类型的字体?(例如,这里的 GCC 手册)
谢谢。
自2007 年以来,我一直在听说The GNU PDF Library。从那时起,我一直期待在野外看到这个工具,但四年过去了,在我看来,这是一段痛苦的漫长时间。我知道该项目的复杂性,但我记得 GNU 基金会已将其标记为最高优先级项目。到底是怎么回事?
大多数 gnu 手册文件使用info,编写一个texinfo然后makeinfo生成信息文件,这很棒。
texinfo 可以包含非英语字符然后生成非英语信息或 pdfs 吗?
如何写中文信息手册?什么是非英文软件手册的最佳解决方案,文档只是一个源文件到 info、man、html 和 pdf。
这按预期工作:
$ echo a b c | xargs --replace="{}" echo x "{}" y
x a b c y
Run Code Online (Sandbox Code Playgroud)
这也可以:
$ echo a b c | xargs --max-args=1 echo x
x a
x b
x c
Run Code Online (Sandbox Code Playgroud)
但这并没有按预期工作:
$ echo a b c | xargs --max-args=1 --replace="{}" echo x "{}" y
x a b c y
Run Code Online (Sandbox Code Playgroud)
这也没有:
$ echo a b c | xargs --delimiter=' ' --max-args=1 --replace="{}" echo x "{}" y
x a y
x b y
x c
y
Run Code Online (Sandbox Code Playgroud)
我期望这个输出: …
我想找到所有子文件夹,其中包含具有相同名称(和扩展名.md)的降价文件。
例如:我想查找以下子文件夹:
Apple/Banana/Orange #Apple/Banana/Orange/Orange.md exists
Apple/Banana #Apple/Banana/Banana.md exists
Apple/Banana/Papaya #Apple/Banana/Papaya/Papaya.md exists
Run Code Online (Sandbox Code Playgroud)
有什么建议?
可以使用以下代码测试问题的解决方案:
#!/usr/bin/env bash
# - goal: "Test"
# - author: Nikhil Agarwal
# - date: Wednesday, August 07, 2019
# - status: P T' (P: Prototyping, T: Tested)
# - usage: ./Test.sh
# - include:
# 1.
# - refer:
# 1. [directory - Find only those folders that contain a File with the same name as the Folder - Unix & Linux Stack Exchange](https://unix.stackexchange.com/questions/534190/find-only-those-folders-that-contain-a-file-with-the-same-name-as-the-folder) …Run Code Online (Sandbox Code Playgroud) GNU 的手册页find明确警告使用-delete意味着-depth. 但是,我找不到对此要求的任何解释:
\n\n\n
-delete删除文件; 如果删除成功则为 true。如果删除失败,则会发出错误消息。[\xe2\x80\xa6] 使用-delete自动打开该-depth选项。
find --version\nfind (GNU findutils) 4.8.0\nRun Code Online (Sandbox Code Playgroud)\n这隐式是后序行走:
\nfind /path -type f -delete\nRun Code Online (Sandbox Code Playgroud)\n但这是预序遍历,是 的常用遍历方法find:
find /path -type f -exec rm -f {} +\nRun Code Online (Sandbox Code Playgroud)\n如果我想用-prune我就不能用-delete,而必须使用更麻烦的-exec rm {} +,但最终效果似乎是一样的。
该-delete操作不会删除目录,那么为什么find -delete需要暗示呢-depth?