如何将别名转换为真实文件?

时间:2019-05-21 08:19:25

标签: shell alias

在大多数情况下,别名可以很好地工作,但是有时命令是由其他程序执行的,他们会在PATH中找到它,在这种情况下,别名不能像真实文件那样工作。

例如

我有以下别名:

alias ghc='stack exec -- ghc'

我想将其转换为可执行文件,以便依赖于它的程序可以正确找到它。文件将像别名一样工作,包括如何处理其参数。

那么,有没有工具或脚本可以帮助您做到这一点?

2 个答案:

答案 0 :(得分:2)

这是我的解决方案,我创建了一个名为ghc的文件,如下所示:

#!/bin/sh
stack exec -- ghc "$@"

$@周围加双引号的原因在这里说明:Propagate all arguments in a bash shell script

答案 1 :(得分:0)

  

那么,有没有工具或脚本可以帮助您做到这一点?

一个简单问题的 lazy 问题...这是一个函数:

alias2script() { 
    if type "$1" | grep -q '^'"$1"' is aliased to ' ; then 
        alias | 
        { sed -n "s@.* ${1}='\(.*\)'\$@#\!/bin/sh\n\1 \"\${\@}\"@p" \
                 > "$1".sh
          chmod +x "$1".sh
          echo "Alias '$1' hereby scriptified.  To run type: './$1.sh'" ;}
    fi; }

让我们尝试使用常见的bash 别名 ll

alias2script ll

输出:

Alias 'll' hereby scriptified.  To run type: './ll.sh'

ll.sh里面是什么:

cat ll.sh 

输出:

#!/bin/sh
ls -alF "${@}"