Не может войти после добавляющего сценария в/etc/profile.d

Я создал немного сценария для добавления закладок в Наутилусе для перенаправления пользователей к сетевому ресурсу. Если я запускаю скрипт вручную, он работает 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.

4
задан 20 March 2014 в 16:57

1 ответ

Материал в/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
    
  • мог бы также удалить строку хижины: этот сценарий не становится выполняемым, он получен.

1
ответ дан 17 November 2019 в 15:49

Другие вопросы по тегам:

Похожие вопросы: