Linux mkdir中的详细选项是什么?
我正在学习Shell(Bash)脚本入门,注意到Linux mkdir中的详细选项是什么?,linux,bash,shell,sh,mkdir,Linux,Bash,Shell,Sh,Mkdir,我正在学习Shell(Bash)脚本入门,注意到mkdir的主页描述了一个详细选项,在创建目录时显示一条消息: 似乎mkdir-v打印了一条预定义的消息。有没有打印自定义邮件的方法?是否有办法永久设置自定义消息而不是默认消息?是否尝试使用此标志运行它 lgml-alfasi2:dotfiles alfasi$ mkdir -v tp mkdir: created directory 'tp' <-- see why it is called 'verbose' ? lgml-alfasi
mkdir
的主页描述了一个详细选项,在创建目录时显示一条消息:
似乎
mkdir-v
打印了一条预定义的消息。有没有打印自定义邮件的方法?是否有办法永久设置自定义消息而不是默认消息?是否尝试使用此标志运行它
lgml-alfasi2:dotfiles alfasi$ mkdir -v tp
mkdir: created directory 'tp' <-- see why it is called 'verbose' ?
lgml-alfasi2:dotfiles alfasi$
因此,对于您的另一个问题:否-您不能“自定义”预定义消息
这就是说,这是一个开源项目,所以如果您喜欢,您可以创建自己的fork,提交PR等:如果您对包装器感到满意,请尝试以下方法
mkdir -v "$@" | sed 's/mkdir: created directory /jar-jar: yea, weesa gotta /'
更基本的是,mkdir
中的消息字符串通常或多或少是硬编码的。但是,如果有本地化支持,您实际上可以使用自己的目录覆盖消息目录
例如,如果您的mkdir
是使用gettext
构建的,您可以创建一个新的英文.po
文件,替换目录创建消息,构建一个新的区域设置,然后使用该文件运行。另见
根据您的需要,这介于严重的过度杀戮和疯狂之间。您可以创建如下脚本:
#/bin/bash
/bin/mkdir "$@" |sed -e"s/mkdir: created directory /$USER created folder /"
然后运行该脚本而不是mkdir
通过在sed中添加额外的-e“s/x/y”来修改要更改的每条消息的脚本
如果您坚持将其命名为mkdir,则可以将其放在mkdir之前的搜索路径中
我不建议将其命名为mkdir。您只会为从调用mkdir的其他脚本而感到悲伤,这是处理-v
选项的部分:
case 'v': /* --verbose */
options.created_directory_format = _("created directory %s");
break;
如您所见,所使用的字符串是硬编码到源代码中的。要将消息永久更改为自定义消息,可以修改源代码的这一部分并重新编译
mkdir
消息打印为标准错误,这样您的sed
就看不到mkdir
@tripleee的输出:我在mac上测试过,mkdir将消息输出到stdout。我没有在Linux上测试。OP要求使用Linux,所以我的不好。另外,你应该总是双引号“$@”
@tripleee:我刚刚在CentOS 6.3上测试过。冗长的消息来自标准输出。你在什么Linux上测试?对不起,你是对的,我一定是第一次打错了什么东西。。(…)
表示它不是严格的硬编码。相反,对硬编码的源字符串执行gettext
查找,查找的结果就是实际打印的内容。链接是指向OSX源(即基本上是BSD),而不是Linux(即GNUcoreutils
)。@tripleee你说得对,google显示了mkdir的多个版本,例如权威源代码是
#/bin/bash
/bin/mkdir "$@" |sed -e"s/mkdir: created directory /$USER created folder /"
case 'v': /* --verbose */
options.created_directory_format = _("created directory %s");
break;