./my-script2 $1
Параметры без кавычек подлежат разбиению на слова при расширении :
The shell scans the results of parameter expansion, command substitution, and arithmetic expansion that did not occur within double quotes for word splitting.
Это указанное поведение POSIX , хотя некоторые оболочки (, особенно zsh ), отключают его по умолчанию. Если вы изменили значение
IFS
по умолчанию, это ваша вина.
Спасибо всем за вашу помощь, но мне удалось решить эту проблему. Что я сделал, так это отредактировал файлshutdown.desktopв /usr/share/applications и заменил исполняемый файл на мой сценарий. Вот как выглядит мой модифицированный файлshutdown.desktop .
[Desktop Entry]
Name=Shutdown
Comment=Backup and power off the computer
GenericName=Shut Down
Exec=gnome-terminal -e /home/kaustab/.scripts/backup_work.sh
Terminal=false
Type=Application
Categories=Utility
Icon=/usr/share/unity/icons/shutdown_highlight.png
NotShowIn=GNOME-Flashback;
X-AppStream-Ignore=true
X-Ubuntu-Gettext-Domain=session-shortcuts
В конце сценарияbackup _work.shя добавил строку gnome-session-quit --power-off
, чтобы дать мне параметры меню питания. Спасибо QIS за указание использовать ssh вместо https для подключения к github. Я попробую это позже.
Вы можете запустить сценарий при завершении работы, следуя инструкциям здесь .
По сути, вы можете поместить скрипт в /etc/rc6.d/
и сделать его исполняемым. Единственным недостатком этого подхода является то, что любой сценарий в указанном выше каталоге будет выполняться от имени пользователя root, что может изменить права доступа к файлам и позже вызвать проблемы. Альтернативой является оставить ваш скрипт в вашем домашнем каталоге и добавить следующий скрипт в/etc/rc6.d
#!/bin/sh
sudo -u kaustab /home/kaustab/backup_work.sh
exit 0
Наконец, вы должны также удалить вызов read
и (или добавить тайм-аут ), так как он будет запрашивать нажатие клавиши перед завершением работы и блокировать завершение работы.
Системный подход
Описанный выше подход сценария rc6.d представляет собой устаревший подход sysv -init к запуску сценариев при завершении работы. В более новых версиях Debian/Ubuntu безопаснее использовать файл модуля systemd для запуска скрипта при завершении работы.
Поместите следующий скрипт в/etc/systemd/system/backup-work.service
(источник)и запуститеsudo systemctl daemon-reload
[Unit]
Description=Backup work directory
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
# executed before the target state is entered
# Also consider kexec.target
[Service]
Type=oneshot
User=kaustab
Group=kaustab
ExecStart=/home/kaustab/backup_work.sh # your path and filename
[Install]
WantedBy=halt.target reboot.target shutdown.target