将bash函数参数传递给emacs

时间:2016-07-06 13:34:13

标签: bash emacs zsh

尝试在Bash中创建emacs守护程序管理功能时遇到问题。

以下是功能代码段:

function ne
{
if [ $# -ge 2 -a "$1" '==' "-s" ]
then
    server="$2";
    param=${@:3};
else
    server="default";
    param=${@:1};
fi
nbsrv=`ls ~/.emacs.d/server | grep "$server" | wc --chars`
if [ "$nbsrv" '==' "0" ]
then
    echo "Starting server '$server'";
    emacs --daemon=$server
fi
emacsclient --server-file=$server -nw $param;
}

它几乎可行,问题在于:

param=${@:x}

例如,如果我跑:

ne -s srv1 file1 file2

它没有打开我2个新文件,但一个名为“file1 file2”

您是否了解我如何才能使其正常工作?

谢谢!

JM445

PS:对不起,如果我的英语不完美,我就是法国人

1 个答案:

答案 0 :(得分:2)

不要为此打扰bash数组。只需shift关闭您不想要的位置参数,并将余下的内容传递给带有"$@"的emacsclient

使用此修改的脚本如下所示:

if [ $# -ge 2 -a "$1" '==' "-s" ]
then
    server="$2";
    shift 2;
else
    server="default";
fi
nbsrv=`ls ~/.emacs.d/server | grep "$server" | wc --chars`
if [ "$nbsrv" '==' "0" ]
then
    echo "Starting server '$server'";
    emacs --daemon=$server
fi
emacsclient --server-file=$server -nw "$@";