如何创建shell别名以创建新脚本并在编辑器中打开它?

时间:2016-12-03 12:07:38

标签: bash shell alias

Shell脚本快捷方式或别名对于在极少数击键中自动执行重复性任务非常有用。

"快捷方式"的示例的一个示例命令take来自zsh mkdir $dir && cd $dir

我想做一些类似的事情(medit)来做这件事:当被叫medit script.sh时:

  • 创建脚本
  • 使其可执行(chmod + x)
  • 用shebang line填充它
  • 在默认编辑器中打开文件

我可以使用别名来执行此操作,因此我会避免编写执行此操作的bash脚本吗?

2 个答案:

答案 0 :(得分:2)

你最好写一个像:

这样的函数
function medit(){
    echo "#!/bin/bash" > "$1"
    chmod +x "$1"
    if [ -n "$VISUAL" ]; then
        "$VISUAL" "$1"
    elif [ -n "$EDITOR" ]; then
        "$EDITOR" "$1"
    else
        vi "$1"
    fi
}

将它放到.bashrc并使用medit script.sh调用它 如果没有指定标准编辑器,它将首先尝试运行$VISUAL$EDITOR中指定的编辑器并返回vi

答案 1 :(得分:0)

你要求的是别名。
如果不使用一个或多个功能,就无法完成所有要求 但是有一种方法可以使别名定义一些函数并调用它们:

str

您需要执行别名alias medit=' SayError(){ local a=$1; shift; printf "%s\n" "$0: $@" >&2; exit "$a"; } medit(){ [[ $# -lt 1 ]] && SayError 1 "We need at least the name of the file as an argument" [[ ! -s $1 ]] && echo "#!/bin/bash" > "$1" || SayError 2 "File $1 already exists" chmod u+x "$1" || SayError 3 "File $1 could not be made executable" ${VISUAL:-${EDITOR:-emacs}} "$1" || SayError 4 "File $1 could not be open in the editor" } \medit' 的上述定义或将其放在medit中,或者只是在正在运行的shell中对其进行处理以使其存在。

然后,当调用别名时,它定义了两个函数:~/.bashrcSayError
是,与别名同名的函数:medit

在函数定义之后,别名将使用技巧调用该函数:

medit

正如(严格来说)\medit 并不完全是别名\medit,bash会继续搜索并找到函数medit,该函数已被定义并执行。

当然,您可以定义函数并使用它们而无需使用别名来定义函数,这是您的选择。

有什么好处是有选择权。 :)

这是您在源文件中定义所有内容的方法:

medit