当我这样编写脚本时
#!/bin/sh
pidof MX-CM48 | xargs kill
if [ -f /home/root/MX-CM48NEW ]; then
mv /home/root/MX-CM48NEW /home/root/MX-CM48
chmod 777 /home/root/MX-CM48
fi
cd /home/root
./MX-CM48 &
脚本正在运行。
但是当我试图这样写时:
#!/bin/sh
NEW_FILE="/home/root/MX-CM48NEW"
OLD_FILE="/home/root/MX-CM48"
PATH="/home/root"
APP_NAME="MX-CM48"
pidof $APP_NAME | xargs kill
if [ -f $NEW_FILE ]; then
mv $NEW_FILE $OLD_FILE
chmod 777 $OLD_FILE
fi
cd $PATH
./$APP_NAME &
pidof和if不起作用。
答案 0 :(得分:4)
PATH
环境变量定义系统在哪里寻找与命令相对应的可执行文件。这是用冒号分隔的目录列表,其中包含可执行文件,例如/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
。因此,当您使用mv
之类的命令时,系统会在/ usr / local / bin中,然后在/ usr / bin中,然后在/ bin等中查找名为“ mv”的文件。
在脚本中将PATH
设置为“ / home / root”时,它将成为系统查找命令可执行文件的唯一位置。我想那根本不是你想要的。
解决方案很简单:为变量使用其他名称。实际上,最好将小写或混合大小写的变量名用于您的事物,因为有很多全大写字母的变量名具有某种特殊含义,并且很难记住并避免所有它们。
顺便说一句,您应该(几乎)始终将变量引用双引号,例如pidof "$APP_NAME"
避免了shell解析未加引号的变量时产生的意外怪异。最后,当您在脚本中使用cd
时,应始终检查错误;否则,如果cd
命令失败,则脚本的其余部分将继续在错误的位置继续执行。
cd "$path" || {
echo "Error moving to $path directory; giving up" >&2
exit 1
}
"./$app_name" &
答案 1 :(得分:0)
除非您将所有命令复制到/home/root
,否则很明显出了什么问题。
PATH="/home/root"
(可能)应该是:
PATH="$PATH:/home/root"
或使用完整的路径名,例如:
/usr/bin/pidof $APP_NAME | /usr/bin/xargs /bin/kill