![bash 脚本中的命令行参数无法识别](https://linux22.com/image/54233/bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E6%97%A0%E6%B3%95%E8%AF%86%E5%88%AB.png)
我使用 Debian (Raspbian) Wheezy。如果此命令行工作正常:
smsd -c sms/out -i 60 -0 -f sms/smsd.log
这个别名也可以正常工作:
bsmsd='smsd -c sms/out -i 60 -0 -f sms/smsd.log'
那么为什么可执行 bash 脚本中的这个相同的命令行会启动命令smsd
,但看不到我指定的任何参数?这是脚本:
#!/bin/bash
smsd -c sms/out -f /home/pi/sms/smsd.log -i 60 -0 -v
我尝试过重定向和管道,但无济于事。
我从命令行调用脚本(称为 ssmsd),如下所示:
./ssmsd
之后,这是以下的输出ps -fC smsd
:
UID PID PPID C STIME TTY TIME CMD
编辑:我知道它无法识别参数,因为它告诉我没有指定假脱机目录。但是我做过: -c sms/out
。当从脚本调用时,它会给出版本号和作者,然后退出。
也许我应该补充一点:它称自己为一个守护进程,但它不是一个表现良好守护进程。你不能smsd start|stop|restart
这样做,而且它不会在后台运行。因此,如果我从命令行(或使用该别名)调用它,然后启动另一个终端并执行ps -fC smsd
,我会得到:
UID PID PPID C STIME TTY TIME CMD
pi 2860 2621 0 17:49 pts/0 00:00:00 smsd -c xxxxxxx -i 60 -0 -f sms/smsd.log
答案1
这看起来相当明显,您没有使用相同的参数。
如果这是gnokii-smsd
并且您指定-v
,就像您在脚本版本中指定一样,它应该打印版本并退出,就像您告诉它的那样。
你为什么没有尝试过精确的shell 模式下的参数与脚本模式下的参数相同吗?