Impossibile accedere dopo aver aggiunto lo script a /etc/profile.d

4

Ho creato un piccolo script per aggiungere segnalibri in Nautilus per reindirizzare gli utenti alla condivisione di rete. Se eseguo lo script manualmente, funziona in modo brillante ma non appena provo ad aggiungerlo in /etc/profile.d, non riesco a connettermi al computer. Sembra che appena faccio un ciclo o qualcosa di "fantasioso", lo script dia un errore. Ecco un esempio se il mio script attualmente funzionante:

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

Appena ho avuto una funzione come questa:

####
# 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
}

... il login non funziona più. Ciò che mi confonde è che l'esecuzione di questo script con * bash add_shortcut.sh * o *. / Add_shortcut.sh * funziona bene ...

È possibile che non possiamo creare funzioni, analizzare array o qualcosa di simile in uno script chiamato da / etc / profile? E in tal caso, dove o come posso eseguire uno script di accesso per tutti gli utenti che si connettono al computer? Oh, a proposito, sto usando Ubuntu 12.04 LTS!

Grazie in anticipo e scusa per il mio inglese!

EDIT: c'è un pastebin dello script. Non lo aggiungo in modo complice visto che i commenti dello script sono in francese quindi ... beh, eccolo: link .

    
posta Patrick Pruneau 19.03.2014 - 21:22

1 risposta

1

Il rouff in /etc/profile.d è probabilmente estratto dal tuo window manager quando accedi, e probabilmente usa / bin / sh, quindi scegli come target una shell POSIX, non bash, perché gli script vengano aggiunti lì. Tieni presente che [[ non viene trovato negli script che sono lì ora.

  • scegli [ ... ] su [[ ... ]]
  • usa funcname() { ... } senza la parola chiave function

dash è una shell POSIX (solo), quindi potresti trovare la pagina man dash utile

Commenti su link

  • Questo è l'errore principale: Modifica

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

    a

     if [ ! -f ~/.gtk-bookmarks ]
    
  • la funzione find_server_by_ip può essere semplificata:

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

    Inoltre, questo commento è fuorviante: la funzione non restituisce nulla, ha un effetto collaterale.

    # Return : echo Server to use
    
  • potrebbe anche rimuovere la linea shebang: questo script non viene eseguito, viene acquisito.

risposta data glenn jackman 19.03.2014 - 21:31

Leggi altre domande sui tag