用echo打印当前命令?

时间:2012-03-19 14:33:04

标签: bash echo

我有一个我编写的脚本 的/ usr / bin中/ UPS

在这个脚本中,我用这个打印用法:

if [ ! $# == 1 ]; then
   echo "Usage: $0 {start|stop|restart|status}"
   exit
fi

当我运行命令“ups”时,我得到了这个:

  

用法:/ usr / bin / ups {start | stop | restart | status}

如何打印这样的用法:

  

用法:ups {start | stop | restart | status}

最简单的方法是:

if [ ! $# == 1 ]; then
   echo "Usage: ups {start|stop|restart|status}"
   exit
fi

但如果有一天我更改了此文件的名称,则使用文本将与之前(ups)相同。

有一个很好的方法吗?

5 个答案:

答案 0 :(得分:4)

使用basename

echo "Usage: $(basename $0) {start|stop|restart|status}"

答案 1 :(得分:2)

您可以更改

$0

${0##*/}

答案 2 :(得分:1)

你可以这样做:

echo "Usage: ${0##*/} {start|stop|restart|status}"

答案 3 :(得分:0)

basename

basename /usr/bin/ups  # outputs ups

答案 4 :(得分:0)

不确定这是否是最好的方法,但你可以这样做:

COMMAND_NAME=${0##*/}
if [ "$(which $COMMAND_NAME 2> /dev/null)" != "$0" ]; then
    COMMAND_NAME=$0  
fi

if [ ! $# == 1 ]; then
   echo "Usage: $COMMAND_NAME {start|stop|restart|status}"
   exit
fi

将使用which命令确定您是否正在从PATH运行该程序。然后显示Usage: ups {start|stop|restart|status},但如果您使用相对路径,则会显示该路径:Usage: ../../usr/bin/ups {start|stop|restart|status}

这很方便,因为如果你把它从PATH中取出它仍然可以正常工作。