我正在学习一本关于Shell (Bash)脚本编程的入门书籍,发现mkdir
命令的手册中描述了一个详细选项,它会在创建目录时显示一条消息:
-v, --verbose
print a message for each created directory
看起来mkdir -v
有一个预定义的消息它会打印出来。有没有办法打印自定义的消息?是否有一种方法可以永久地设置自定义消息而不是默认消息?
以下是处理-v
选项的部分,来自mkdir.c
的源代码:
case 'v': /* --verbose */
options.created_directory_format = _("created directory %s");
break;
正如您所看到的,使用的字符串是硬编码到源代码中的。要永久更改消息为自定义消息,可以修改源代码的此部分并重新编译mkdir
。
#/bin/bash
/bin/mkdir "$@" |sed -e"s/mkdir: created directory /$USER created folder /"
运行该脚本而不是mkdir。
通过向sed添加额外的-e“s / x / y”来修改每个要更改的消息的脚本。
如果您坚持要将其命名为mkdir,则可以在mkdir之前将其放入搜索路径中。
我不建议将其命名为mkdir。这只会给调用mkdir的其他脚本带来麻烦。
sed
没有看到 mkdir
的输出。 - tripleee"$@"
。 - tripleeemkdir -v "$@" | sed 's/mkdir: created directory /jar-jar: yea, weesa gotta /'
mkdir
中的消息字符串通常是硬编码的。但是,如果有本地化支持,您实际上可以使用自己的消息目录覆盖消息目录。mkdir
是使用gettext
构建的,您可以创建一个新的英文.po
文件,替换目录创建消息,构建一个新的区域设置,并运行它。请参见http://translationproject.org/domain/coreutils.html
根据您的需求,这在严重过度和疯狂之间。你试过用这个标志来运行它吗?
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.
coreutils
)。 - tripleee
_(...)
表示它并不是严格的硬编码。而是在硬编码源字符串上执行gettext
查找,实际打印出来的是该查找的结果。 - tripleee