加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash:覆盖echo以在脚本中打印自定义前缀

发布时间:2020-12-16 01:51:30 所属栏目:安全 来源:网络整理
导读:我有一些冗长的脚本互相调用,我希望他们的输出更具描述性.我们的想法是为每个脚本自定义echo命令,如下所示. 我的问题是,如何使用echo进行非递归? 这是script1.sh #!/bin/bash#Original version:#function echo(){ echo $(basename $0 .sh): $1; }#Version a
我有一些冗长的脚本互相调用,我希望他们的输出更具描述性.我们的想法是为每个脚本自定义echo命令,如下所示.

我的问题是,如何使用echo进行非递归?

这是script1.sh

#!/bin/bash
#Original version:
#function echo(){ echo $(basename $0 .sh): $1; }
#Version after fixes
function echo(){ builtin echo -n "$(basename $0 .sh): ">&2; builtin echo $@ ; } 
echo Info
./script2.sh

这是script2.sh

#!/bin/bash
#Original version:
#function echo(){ echo $(basename $0 .sh): $1; }
#Version after fixes
function echo(){ builtin echo -n "$(basename $0 .sh): ">&2; builtin echo $@ ; } 
echo Info
exit 0

所以输出应该是:

>./script1.sh
script1: Info
script2: Info

—编辑

奖金:

>./script1.sh 2> /dev/null 
Info
Info

解决方法

使用builtin关键字:

function echo(){ builtin echo $(basename $0 .sh): $1; }

这里的帮助页面:

$help builtin
builtin: builtin [shell-builtin [arg ...]]
    Execute shell builtins.

    Execute SHELL-BUILTIN with arguments ARGs without performing command
    lookup.  This is useful when you wish to reimplement a shell builtin
    as a shell function,but need to execute the builtin within the function.

    Exit Status:
    Returns the exit status of SHELL-BUILTIN,or false if SHELL-BUILTIN is
    not a shell builtin..

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读