我编写了一个 (ba)sh 脚本来将从 POST 方法接收到的内容写入文件:
#!/bin/sh
PORT=$1
FILE=$2
while true
do
echo -e "HTTP/1.1 200 OK\n\n" | ./busybox-armv7l nc -l -p $PORT | tr '[\r\n]' '#' | sed "s/.*##//" | tr '#' '\n' | ( read line; echo $line > $FILE; echo $line )
done
如果我从控制台启动脚本,它可以正常工作:
./server 5000 /tmp/foo
并且指定的文件被接收到的数据填充。但是当我尝试在启动时启动它时,它不再起作用了。因为它是一个商业嵌入式设备,所以我有一个脚本,/use/sbin/init.sh
可以在其中添加我自己的脚本:
#!/bin/sh
export PATH=/usr/bin:/bin/:/usr/sbin:/sbin
mount -t proc none /proc
mount -t sysfs none /sys
mount -t tmpfs none /tmp
export MACHINE_ID=`cat /sys/devices/soc0/machine | sed 's/ /-/g'`
echo 8 >/proc/sys/kernel/printk
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts -ogid=5,mode=620
ln -snf /tmp /dev/shm
mkdir /tmp/sd
mount -t vfat /dev/mmcblk0p1 /tmp/sd -o rw
depmod -a
/etc/init.d/syslog start
ifconfig lo up
ifconfig eth0 up
sleep 1s
mii-tool --reset
ifconfig eth0 192.168.1.132
[ ! -x /etc/dropbear/dropbear_rsa_host_key ] || /usr/sbin/dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
[ ! -x /etc/dropbear/dropbear_dss_host_key ] || /usr/sbin/dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
/usr/sbin/dropbear -r /etc/dropbear/dropbear_rsa_host_key -p 22
/home/root/server.sh 5000 /tmp/foo > /tmp/log.txt &
/bin/sh
碰巧nc
服务器没有收到任何内容并且log.txt
不断充满\n
.
你看到这里有明显的错误吗?我可以通过什么方式进一步调试问题?
答案1
使用绝对路径而不是相对路径,这样即使当前目录不同,也可以找到所请求的可执行文件:
echo -e "HTTP/1.1 200 OK\n\n" | /home/root/busybox-armv7l nc -l -p $PORT | tr '[\r\n]' '#' | sed "s/.*##//" | tr '#' '\n' | ( read line; echo $line > $FILE; echo $line )