Использование команды eval для создания псевдонима команды - PullRequest
0 голосов
/ 25 октября 2011

Я не могу заставить скрипт bash выполнить команду псевдонима, чтобы установить имя хоста рабочей станции в качестве псевдонима для эквивалентной команды WOL (Wakeup On Lan). Я полагаю, что должна быть проблема с цитированием где-то, что я пропускаю.

#!/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 "$ Command":

псевдоним Justin-PC = '/ usr / sbin / wol -i 192.168.1.255 00: 1F: D0: 26: 72: 53'
псевдоним Justin-HTPC = '/ usr / sbin / wol -i 192.168.1.255 00: 16: 17: DD: 12: 7B'
alias justinlaptop = '/ usr / sbin / wol -i 192.168.1.255 00: 1C: 25: BC: C3: 85'

1 Ответ

2 голосов
/ 25 октября 2011

Поскольку вы, похоже, запускаете это как скрипт, ваша текущая оболочка не получит псевдонимы - псевдонимы исчезнут, после чего процесс bash, управляющий скриптом, завершится.

Попробуйте: . script.sh или source script.sh

...