Скрипт запускается, когда я набираю его в терминале, но не когда я запускаю его из файла.sh

Я хотел запустить это при запуске, потому что мне нравится играть с несколькими DE. Когда я запускаю этот скрипт из файла, он не запускает Docky.

Я уже изменил права доступа к файлу, чтобы он мог работать как программа.

Когда я ввожу именно это в gnome-терминал, он запускает Docky, если я вошел в gnome-classic. Я хотел запустить этот скрипт при запуске, чтобы Docky не запускался в Unity:

if [ $DESKTOP_SESSION == "gnome-classic" ] ; then docky ; fi

Какие-либо предложения? Я попытался написать что-то вроде Firefox в том же файле, и он запустит Firefox. Поэтому, когда я запускаю следующий скрипт из файла...

cd /home/user/Desktop
mkdir ITRAN
if [ $DESKTOP_SESSION == "gnome-classic" ] ; then docky ; fi

Он создает новый файл на моем рабочем столе, но не запускает Docky, даже если я просто скопирую тот же код в окно терминала, которое он запускает...

С помощью гейры я изменил сценарий. Тем не менее, теперь Docky запускается независимо от того, какой DE я запускаю, Unity или gnome-classic.

#!/bin/sh
if [ $DESKTOP_SESSION = "gnome-classic" ]; then
   docky
fi

Я также пытался

$DESKTOP_SESSION = "gnome-classic"
$DESKTOP_SESSION = gnome-classic
"$DESKTOP_SESSION" = gnome-classic
"$DESKTOP_SESSION" = "gnome-classic"

исключить возможность того, что я ошибся в этой части.

2 ответа

Решение

[ команда не имеет == оператор. Баш позволяет это, но черта будет съеживаться. Правильный оператор для использования =, Сценарий, который вы опубликовали в своем вопросе, не имеет шебанга, поэтому, скорее всего, он будет запущен sh, Так:

#!/bin/sh
mkdir -p "$HOME/Desktop/ITRAN"
if [ "$DESKTOP_SESSION" = gnome-classic ]; then
    docky
fi

В любом случае, если это не удастся, вы, скорее всего, найдете сообщения об ошибках в ~/.xsession-errorsтак что ищите подсказки.

Убедитесь, что ваш скрипт начинается с:

#!/bin/sh

Кроме того, убедитесь, что ваш скрипт исполняемый:

chmod a+x path/to/your/script.sh
Другие вопросы по тегам