Shell脚本快捷方式或别名对于在极少数击键中自动执行重复性任务非常有用。
"快捷方式"的示例的一个示例命令take
来自zsh
mkdir $dir && cd $dir
。
我想做一些类似的事情(medit
)来做这件事:当被叫medit script.sh
时:
我可以使用别名来执行此操作,因此我会避免编写执行此操作的bash脚本吗?
答案 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中对其进行处理以使其存在。
然后,当调用别名时,它定义了两个函数:~/.bashrc
和SayError
。
是,与别名同名的函数:medit
。
在函数定义之后,别名将使用技巧调用该函数:
medit
正如(严格来说)\medit
并不完全是别名\medit
,bash会继续搜索并找到函数medit
,该函数已被定义并执行。
当然,您可以定义函数并使用它们而无需使用别名来定义函数,这是您的选择。
有什么好处是有选择权。 :)
这是您在源文件中定义所有内容的方法:
medit