从bash脚本创建的全局bash脚本别名

时间:2015-12-18 20:26:13

标签: linux bash shell alias

我正在提供一些服务,我有一个setup.sh文件,必须首次(或更新时)。此脚本应创建某种别名,可以从此终端或新终端访问(也可在系统重新启动后)。此别名应指向另一个可执行的sh文件。

setup.sh文件:

#!/bin/bash

alias customservice='./customservice.sh "$@"'

正如您所看到的,这个customservice.sh脚本已准备好接受多个参数。有了这个自定义服务别名,我想这样调用这个脚本:

  

customservice //显示帮助
  customservice开始
  定制服务停止
  customservice exec bash
  ......

我的customservice.sh fil:

if [ $# -eq 1 ] && [ $1 = "start" ]; then
   //do something
elif [ $# -eq 1 ] && [ $1 = "stop" ]; then
   //do something
elif [ $# > 1 ] && [ $1 = "exec" ]; then
   //do stuff with ${@:2}
else
   echo "help"
fi

也许诉讼杀人命令也会很好。它应该完全删除这个别名。

也许,如果这种方法被弃用,我愿意接受更好的解决方案。

2 个答案:

答案 0 :(得分:4)

这不是做你所瞄准的最佳方式。如果您可以重新考虑您的方法,我建议您执行以下操作:

  1. 使用您的bash启动文件,即~/.bashrc(或类似)来设置脚本的路径:export PATH=$PATH:/path/to/script/dir
  2. 为您的脚本customservice命名,而不是customservice.sh
  3. Shebang添加到您的脚本中,例如#!/usr/bin/sh#!/bin/bash,具体取决于您执行该操作所需的内容以及解释程序的位置。或者,对于通用方法,您可以使用#!/usr/bin/env bash
  4. 优点:

    1. 简单易懂。
    2. 您不会在操作中添加别名层 - 直接调用脚本。
    3. 您不需要找到将$@传递给别名的方法,这可能很脏。
    4. 如果您不想使用直接方式,Make a Bash alias that takes a parameter?应完全满足您的需求。

答案 1 :(得分:0)

如果您要在〜/ .bashrc中加载​​别名:

#!/bin/bash 

#add following in your setup.sh 
cat << EOF >> ~/.bashrc
alias customservice='./customservice.sh \"\$@\"'
EOF

在具有bash shell的新终端上作为默认值,它应该激活别名。

显然,在安装行之前,你应该使用setup.sh在〜/ .bashrc中进行grep,以防别名已经存在。

相关问题