Não é possível fazer login após adicionar script ao /etc/profile.d

4

Eu criei um pequeno script para adicionar marcadores no Nautilus para redirecionar os usuários para o compartilhamento de rede. Se eu executar o script manualmente, ele funciona de forma brilhante, mas assim que eu tentar adicioná-lo em /etc/profile.d, não consigo me conectar ao computador. Parece que assim que eu faço um loop ou qualquer coisa "chique" assim, o script dá um erro. Aqui está um exemplo se meu script atualmente está funcionando:

#!/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

Assim que eu tive uma função como esta:

####
# 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 [[  -eq 78 ]]
        then
                echo "Server A"
        else
                echo "Server B"
        fi
}

... faça o login parar de funcionar. O que me deixa perplexo é que executar este script com * bash add_shortcut.sh * ou *. / Add_shortcut.sh * funciona bem ...

É possível que não possamos criar funções, analisar matrizes ou algo assim em um script chamado por / etc / profile? E nesse caso, onde ou como posso executar um script de login para todos os usuários conectados ao computador? Ah, pelo jeito que eu estou executando o Ubuntu 12.04 LTS!

Obrigado antecipadamente e desculpe pelo meu inglês!

EDIT: Existe um pastebin do script. Eu não adiciono isso compeletly desde que os comentários do roteiro estão em francês, então ... bem, aí está: link .

    
por Patrick Pruneau 19.03.2014 / 21:22

1 resposta

1

Coisas em /etc/profile.d provavelmente são originadas pelo seu gerenciador de janelas quando você efetua login, e isso provavelmente usa / bin / sh, então use um shell POSIX, não o bash, para que scripts sejam adicionados lá. Observe que [[ não foi encontrado nos scripts que estão lá agora.

Então,

  • escolha [ ... ] over [[ ... ]]
  • use funcname() { ... } sem a palavra-chave function

dash é um shell POSIX (apenas), portanto, você pode encontrar a página de manual do traço à mão

Comentários sobre link

  • Este é o principal erro: Alterar

    if [[ ! -f ~/.gtk-bookmarks ]]
    

    para

     if [ ! -f ~/.gtk-bookmarks ]
    
  • a função find_server_by_ip pode ser simplificada:

    findserverbyip() {
        case "$(hostname -I)" in 
            *[0-9].33.9.[0-9]*) share_server=serverB ;;
            *)                  share_server=serverA ;;
        esac
    }
    

    Além disso, este comentário é enganoso: a função não retorna nada, tem um efeito colateral.

    # Return : echo Server to use
    
  • também pode remover a linha shebang: esse script não é executado, ele é originado.

por glenn jackman 19.03.2014 / 21:31