2008年9月21日 星期日

openbox右鍵選單 ssh to (2)

第二部份就真的很痛苦了,最主要的原因是shell script對於pipe後送進陣列裡的元素有時候不是全有就是全無,如果想要一個元素裡有空白又有斷行,基本上是被允許的,但是卻不一定是你想要的。

#!/bin/sh

gen_menu() {
    echo "<item label=\""$1"\">"
    echo -n '<action name="Execute"><execute>'
    echo -n " xterm -e ssh"
    echo -n    "`echo $2 | tr : " " `"
    echo "</execute></action>"
    echo "</item>"
}

##以上單純只是生出選單的副程式

echo "<openbox_pipe_menu>"

##將上個步驟產生的檔案用grep產生出選單上的名字,其實是可以自己手動修改設定檔變成 root@somewhere之類文字也不會影響下面命令參數。

host=( `grep "# ssh to " $HOME/.ssh/cast | sed -e 's/\#\ ssh\ to\ //g' | xargs` )

##取出命令參數,但是因為xargs遇到空白與斷行就會開始拆參數,所以先用sed把空白替換為:,這樣就沒問題了;而最後上面產出的命令參數時再用tr把:換回空白,解決了這個問題。其實第二行參數也可以任意的改,除了使用:做分隔的部份參數。有個解,就是用︿#,。等之類字元。不過等它發生了再來改寫就好了。

action=( `grep -v \# $HOME/.ssh/cast | sed 's/\ /:/g' | xargs -d \n` )
for (( i=0 ; i < ${#host[*]} ; i++ ))
do
    gen_menu ${host[$i]} ${action[$i]}
done

echo '</openbox_pipe_menu>'

我將它放在這裡

沒有留言: