我正在尝试创建一个安装后脚本,该脚本本身会创建一个 bash 脚本(startapp 脚本)。这是原始启动脚本:
#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]
then wmctrl -a "$2"
else $1 &
fi
这是我的安装后脚本
#!/bin/sh
# CONFIGURE Teamviewer startup link
sudo echo -e "#!/bin/bash\nif [ `wmctrl -l | grep -c "$2"` != 0 ]\nthen wmctrl -a "$2"\nelse $1 &\nfi" > /usr/local/bin/startapp
# Activate script
sudo chmod +x /usr/local/bin/startapp
但是当我使用检查脚本时sudo nano /usr/local/bin/startapp
,我得到了这个奇怪的修改后的脚本:
#!/bin/bash
if [ 6 != 0 ]
then wmctrl -a
else &
fi
你能告诉我为什么系统会自动修改它吗?
答案1
用一个这里的文件
#!/bin/sh
cat <<'EOF' | sudo tee /usr/local/bin/startapp
#!/bin/bash
if [ `wmctrl -l | grep -c "$2"` != 0 ]
then wmctrl -a "$2"
else $1 &
fi
EOF
\EOF
在分隔符中使用引号(任何类型 - 包括反斜杠)可以防止调用壳牌过早扩大替代。
答案2
您需要转义反引号,因为它们是在引用的字符串内插入的,因此会执行。