Я пытаюсь создать сценарий после установки, который сам создает сценарий 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
Не могли бы вы сказать мне, почему система изменила его автоматически?
Используйте здесь документ
#!/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
) в разделителе предотвращает преждевременное расширение замещений , вызывающим оболочку.
Вы должны избегать обратных кавычек, потому что они вставляются внутри вашей строки в кавычках и поэтому выполняются.