2016-07-06 129 views
0

我在嘗試在Bash中創建emacs守護進程管理函數時遇到問題。將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:很抱歉,如果我的英語是不完美的,我是法國人

回答

2

不要用這個bash的陣列打擾。只是shift關閉位置參數,你不想要的,並通過與其餘以emacsclient "[email protected]"

你這個修改腳本的樣子:

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 "[email protected]"; 
+0

它的工作原理,感謝的=) – JM445