Я создал немного сценария для добавления закладок в Наутилусе для перенаправления пользователей к сетевому ресурсу. Если я запускаю скрипт вручную, он работает brillantly, но как только я пытаюсь добавить его в/etc/profile.d, я не могу соединиться с компьютером. Кажется, что, как только я, цикл или что-либо "полагает" как этот, сценарий дают ошибку. Вот пример если мой в настоящее время рабочий сценарий:
#!/bin/bash
# Creating gtk-bookmarks if it doesn't exists
if [[ ! -f ~/.gtk-bookmarks ]]
then
touch ~/.gtk-bookmarks
fi
# Adding bookmarks if not present
if ! grep -Fxq "smb://example.com/R03C01 Software:" ~/.gtk-bookmarks
then
echo "smb://example.com/R03C01 Software:" >> ~/.gtk-bookmarks
fi
Как только у меня была функция как этот:
####
# Function find_server_by_ip()
# Desc : This function find the server to use for the current host IP Address
# Parameters : None
# Return : echo Server to use
####
function find_server_by_ip()
{
hostname_ip=$(hostname -I)
IFS="."
set -- $hostname_ip
if [[ $3 -eq 78 ]]
then
echo "Server A"
else
echo "Server B"
fi
}
... войдите в систему прекращают работать. То, что экранирует меня, это запускающее этот скрипт с *колотит add_shortcut.sh*, или *./add_shortcut.sh* хорошо работает...
Действительно ли возможно, что мы не можем создать функции, массивы синтаксического анализа или что-нибудь как этот в сценарии, названном/etc/profile? И в этом случае, где или как я могу выполнить сценарий входа в систему для всех пользователей, соединяющихся с компьютером? О, по тому, как я запускаю Ubuntu 12.04 LTS!
Заранее спасибо и жаль о моем английском языке!
РЕДАКТИРОВАНИЕ: существует pastebin сценария. Я не добавляю его compeletly, так как комментарии сценария находятся на французском языке так... хорошо, там это: http://pastebin.com/71XzaBk6.
Материал в/etc/profile.d, вероятно, получен Вашим менеджером окон, когда Вы входите в систему, и это, вероятно, использует/bin/sh, так будьте нацелены на оболочку POSIX, не колотите, чтобы сценарии были добавлены там. Отметьте это [[
не найден в сценариях, которые являются там теперь.
Так,
[ ... ]
[[ ... ]]
funcname() { ... }
без function
ключевое словотире является POSIX (только) окружают, таким образом, Вы могли бы найти страницу справочника тире удобной
Комментарии к http://pastebin.com/71XzaBk6
Это - основная ошибка: Изменение
if [[ ! -f ~/.gtk-bookmarks ]]
кому:
if [ ! -f ~/.gtk-bookmarks ]
find_server_by_ip
функция может быть упрощена:
findserverbyip() {
case "$(hostname -I)" in
*[0-9].33.9.[0-9]*) share_server=serverB ;;
*) share_server=serverA ;;
esac
}
Кроме того, этот комментарий вводит в заблуждение: функция ничего не возвращает, она имеет побочный эффект.
# Return : echo Server to use
мог бы также удалить строку хижины: этот сценарий не становится выполняемым, он получен.