Shell - 使用nc -c调用函数

时间:2016-06-02 13:28:20

标签: shell netcat

这是我的服务器代码。 我只是想从客户端获取数据,分析它并发送我的答案。 有没有办法在nc中调用我的函数managedata()?我的代码显然不起作用。

server.sh:

managedata()
{
echo $1
#do something with data
return $1
}

listen()
{
echo "Server listening.."
nc -l -p 1234 -c '$(read i && managedata $i && echo $?)'
}

#MAIN
while true;
do
listen
done

Client.sh:

send()
{
echo $1 | nc $ip $port -o 0
}

#
register()
{
read -p "Login: " usrname
echo -n "Password: "
read -s password | shasum > password

#Schleife zum encrypten des Passworts
#Count = n -> Leslie Lamport Alogrithmus
n=5
count=$n
while [ $count -ge 2 ]
do
    password="$(cat password | shasum)"
    ((count--))
done

password=`cat password`
echo
echo $password

data="reg-$usrname-$n-$password"

send $data
}

#
log()
{
echo "..."
}

#
menue()
{
echo "====== Lab: Shell Programming (BS) ======"
echo "  r   Register"
echo "  l   Login"
echo "  q   Quit"
echo

read -p "your choice: " check

case "$check" in
    r) register;;
    l) log;;
    q) exit;;
esac

}


#MAIN
ip=$1
port=$2

while true
do
menue
done

bash -x server.sh:

+ true
+ listen
+ echo 'Server listening..'
Server listening..
+ nc -l -p 1234 -c '$(read i && managedata $i && echo $?)'
sh: 1: managedata: not found
+ true
+ listen
+ echo 'Server listening..'
Server listening..
+ nc -l -p 1234 -c '$(read i && managedata $i && echo $?)'

1 个答案:

答案 0 :(得分:1)

你应该"告诉" bashmanagedata视为可执行的命令或函数。 顺便说一下,您需要使用$()来执行整个表达式managedata

nc -l -p 1234 -c $(read i && managedata $i && echo $?)

bash也不能返回字符串,只返回整数错误代码,因此return $1如果在0到255范围内不是整数,则不会起作用。

替换为return 0