这是我的服务器代码。 我只是想从客户端获取数据,分析它并发送我的答案。 有没有办法在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 $?)'
答案 0 :(得分:1)
你应该"告诉" bash
将managedata
视为可执行的命令或函数。
顺便说一下,您需要使用$()
来执行整个表达式managedata
:
nc -l -p 1234 -c $(read i && managedata $i && echo $?)
bash也不能返回字符串,只返回整数错误代码,因此return $1
如果在0到255范围内不是整数,则不会起作用。
替换为return 0