我正在研究 Shell(Bash)Scripting 的入门知识,并注意到mkdir
的联机帮助页描述了一个详细的选项,它在创建目录时显示一条消息:
-v, --verbose print a message for each created directory
似乎mkdir -v
有一个预先定义的消息。有没有办法打印自定义消息?有没有办法永久设置自定义消息而不是默认消息?
答案 0 :(得分:4)
从the source code for mkdir.c
开始,这是处理-v
选项的部分:
case 'v': /* --verbose */
options.created_directory_format = _("created directory %s");
break;
如您所见,使用的字符串被硬编码到源中。要将邮件永久更改为自定义邮件,可以修改源代码的此部分并重新编译mkdir
。
答案 1 :(得分:3)
您可以创建如下脚本:
#/bin/bash
/bin/mkdir "$@" |sed -e"s/mkdir: created directory /$USER created folder /"
然后运行该脚本而不是mkdir。
通过向sed添加额外的-e“s / x / y”来修改要更改的每条消息的脚本。
如果您坚持将其命名为mkdir,那么您可以在mkdir之前将其放在搜索路径中。
我不建议将其命名为mkdir。你只会为其他调用mkdir
的脚本感到悲伤答案 2 :(得分:2)
如果您对包装器感到满意,请尝试类似
的内容mkdir -v "$@" | sed 's/mkdir: created directory /jar-jar: yea, weesa gotta /'
更重要的是,mkdir
中的消息字符串通常或多或少是硬编码的。但是,如果有本地化支持,您实际上可以使用自己的方式覆盖消息目录。
例如,如果您的mkdir
是使用gettext
构建的,则可以创建一个新的英语.po
文件,替换目录创建消息,构建新的语言环境,然后运行该文件。另请参阅http://translationproject.org/domain/coreutils.html
根据你的需要,这可能介于严重的过度杀伤和疯狂之间。
答案 3 :(得分:1)
您是否尝试使用此标志运行它?
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.
那么对于你的另一个问题:不 - 你不能&#34;定制&#34;预定义的消息
那就是说,这是一个开源项目,所以如果您愿意 - 您可以创建自己的分支,提交PR等:http://opensource.apple.com/source/file_cmds/file_cmds-212/mkdir/mkdir.c