2012-03-19 114 views
0

我有一个脚本,我在 的/ usr/bin中/ UPS拷入用echo打印当前命令?

在这个剧本我打印使用本:

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

当我运行命令 “UPS” 我得到这个:

用法:在/ usr/bin中/ UPS {启动|停止|重启|状态}

如何打印,像这样的:

用途:UPS {启动|停止|重启|状态}

的easyest方式将做到这一点:

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

,但如果有一天我改这个名字文件的使用文本将与以前相同(ups)。

有没有一种很好的方法来做到这一点?

回答

4

使用basename

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

可以更改

$0 

${0##*/} 
+0

IMO比接受的答案更便于携带。 – suvayu 2012-03-20 01:19:43

1

你可以这样做:

echo "Usage: ${0##*/} {start|stop|restart|status}" 
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中取出,它仍然可以正常工作。