mkdir 中的详细选项是什么?

What is the verbose option in mkdir?

我正在阅读 Shell (Bash) 脚本 的入门读物,并注意到 mkdir 的联机帮助页描述了一个冗长的创建目录时显示消息的选项:

-v, --verbose
       print a message for each created directory

似乎 mkdir -v 打印了一条预定义的消息。有没有办法打印自定义消息?有没有办法永久设置自定义消息而不是默认消息?

你有没有尝试 运行 使用这个标志?

lgml-alfasi2:dotfiles alfasi$ mkdir -v tp
mkdir: created directory 'tp'  <-- see why it is called 'verbose' ?
lgml-alfasi2:dotfiles alfasi$

来自男人:

-v      Be verbose when creating directories, listing them as they are created.

所以对于你的另一个问题:不 - 你不能 "custom" 预定义的消息

也就是说,这是一个开源项目,所以如果您愿意,您可以创建自己的分支、提交 PR 等:http://opensource.apple.com/source/file_cmds/file_cmds-212/mkdir/mkdir.c

如果您对包装器感到满意,请尝试

mkdir -v "$@" | sed 's/mkdir: created directory /jar-jar: yea, weesa gotta /'

更根本的是,mkdir 中的消息字符串通常或多或少是硬编码的。但是,如果有本地化支持,您实际上可以用自己的消息目录覆盖。

例如,如果您的 mkdir 是使用 gettext 构建的,您可以创建一个新的英语 .po 文件,替换目录创建消息,构建一个新的语言环境,然后 运行 就这样。另见 http://translationproject.org/domain/coreutils.html

这取决于你想要什么,这介于严重矫枉过正和疯狂之间。

您可以创建这样的脚本:

#/bin/bash

/bin/mkdir "$@" |sed -e"s/mkdir: created directory /$USER created folder /"

然后运行那个脚本而不是mkdir。

通过向 sed 添加额外的 -e"s/x/y",为每条要更改的消息修改该脚本。

如果您坚持将其命名为mkdir,那么您可以将其放在搜索路径中的mkdir 之前。

我不建议将其命名为 mkdir。您只会为调用 mkdir

的其他脚本感到悲伤

来自 the source code for mkdir.c,这是处理 -v 选项的部分:

    case 'v': /* --verbose  */
      options.created_directory_format = _("created directory %s");
      break;

如您所见,使用的字符串已硬编码到源代码中。要将消息永久更改为自定义消息,可以修改源代码的这一部分并重新编译mkdir