我有以下bash脚本(我使用msysgit执行它)。该文件名为git-open
:
#!/usr/bin/env bash
tempfile=`mktemp` || exit 1
git show $1 > $tempfile
notepad++ -multiInst -notabbar -nosession -noPlugin $tempfile
rm $tempfile
我通过git调用它:
git open master:Applications/Survey/Source/Controller/SurveyManager.cpp
在我用notepad ++打开它之前,我希望它将扩展名附加到临时文件,以便编辑器自动应用正确的语法高亮显示。如果没有指定扩展名,那么mktemp不应该添加扩展名。
如何修改上面的脚本才能像这样工作?我对linux脚本的经验很少,所以我不确定如何为此实现正则表达式(假设正则表达式是必要的)。
答案 0 :(得分:2)
您可以为您的文件名传递mktemp
模板。
tempfile=$(mktemp -t git-open.XXXXXXXX.${1##*.}) || exit 1
答案 1 :(得分:1)
正则表达式对此有些过分。参数扩展中的全局模式与前缀删除完全足够。
tempfile=`mktemp`.${1##*.}
${1##*.}
表示"展开$1
,但删除与通配模式*.
匹配的最长前缀。 *
匹配所有内容,.
匹配自身,因此会删除所有内容,包括最后.
。剩下的就是扩展。
您可以使用##
代替#
代替最短的前缀,%
代替最短的后缀,%%
代替最长的前缀。
好的,你可能想要处理没有扩展的情况。这可以在case
和更多glob模式的帮助下完成:
case ${1##*/} in
*.*) suffix=${1##*.};;
*) suffix='';;
esac
tempfile=`mktemp`$suffix
这将采用不带前导目录的文件名,测试它是否包含.
并仅在有后缀的情况下使用。或者你可以将扩展与devnull暗示的原始扩展进行比较。