2011-10-25 9 views
0

私の人生の間、ワシントンのホスト名をWOL(Wakeup On Lan)同等のコマンドにエイリアス名を設定するために、aliasコマンドを実行するbashスクリプトを取得できません。私は、どこかで私が行方不明になっていることを引用する問題がなければならないと考えている。ここでevalコマンドを使用してコマンドエイリアスを作成する

#!/bin/bash 

WOLHosts=`nvram get wol_hosts` 

WOLList=($(echo "$WOLHosts" | grep -o '[A-F0-9]\{2\}:[A-F0-9]\{2\}:[A-F0-9]\{2\}:[A-F0-9]\{2\}:[A-F0-9]\{2\}:[A-F0-9]\{2\}=[^=]*=[0-9]*[.][0-9]*[.][0-9]*[.][0-9]*')) 

if [ "${#WOLList[@]}" -gt 0 ] 
then 
for Match in ${WOLList[@]} 
do 
    Command=`echo "$Match" | sed -r "s/([A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2})=([^=]*)=([0-9]*[.][0-9]*[.][0-9]*[.][0-9]*)/alias \2='\/usr\/sbin\/wol -i \3 \1'/"` 
    Name=`echo "$Match" | sed -r "s/([A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2})=([^=]*)=([0-9]*[.][0-9]*[.][0-9]*[.][0-9]*)/\2/"` 
    Com=`echo "$Match" | sed -r "s/([A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2}:[A-F0-9]{2})=([^=]*)=([0-9]*[.][0-9]*[.][0-9]*[.][0-9]*)/\/usr\/sbin\/wol -i \3 \1/"` 
    alias $Name="$Com" 
    eval $Command 
    echo "$Command" 
done 
fi 

exit 0 

私は現在のスクリプトで受け付けており、いくつかのサンプルデータと出力されます:(WOLHostsに)

入力:

00:1F:D0:26:72:53=Justin-PC=192.168.1.255 00:16:17:DD:12:7B=Justin-HTPC=192.168.1.255 00:1C:25:BC:C3:85=justinlaptop=192.168.1.255 

はviのWOecho「$コマンドによって生成される出力"である:

別名ジャスティン-PC = 'は/ usr/sbinに/ WOL -i 192.168.1.255 00:1F:D0:26:72:53'
別名ジャスティン-HTPC = 'は/ usr/sbinに/ WOL -i 1 92.168.1.255 00:16:17:DD:12:7B」
エイリアスjustinlaptop = 'は/ usr/sbinに/ WOL -i 192.168.1.255 00:1C:25:BC:C3:85'

答えて

2

ますのでこれをスクリプトとして実行しているように見える場合、現在のシェルはエイリアスを受け取りません。エイリアスは消え、スクリプトを実行するbashプロセスは終了します。

試してみてください。. script.shまたは

+1

source script.shありがとうございます!私はbashスクリプトの範囲を認識していませんでした。私はもっ​​と読むことがあります。 S.このスクリプトを使用している人は、exitのコンテキストがbashスクリプトではなく現在のセッションであるため、exit 0を削除してください – Turcogj

関連する問題