什么是mkdir中的详细选项?

我正在通过Shell(Bash)Scripting的入门工作,并注意到mkdir的联机帮助页描述了一个详细的选项,在创build目录时显示一条消息:

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

看来mkdir -v有一个预定义的消息,它打印。 有没有办法打印自定义消息? 有没有办法永久设置自定义消息,而不是默认消息?

mkdir.c的源代码 ,这是处理-v选项的部分:

  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

如果你对包装很满意,请尝试类似的东西

 mkdir -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. 

所以对于你的另一个问题:不 – 你不能“定制”一个预定义的消息

这就是说,这是一个开源项目,所以如果你觉得这样 – 你可以创建自己的分支,提交PR等: http : //opensource.apple.com/source/file_cmds/file_cmds-212/mkdir/mkdir。 C