J'ai créé un petit script pour ajouter des signets dans Nautilus pour rediriger les utilisateurs vers le partage réseau. Si j'exécute le script manuellement, il fonctionne parfaitement mais dès que j'essaye de l'ajouter dans /etc/profile.d, je ne peux pas me connecter à l'ordinateur. Il semble que dès que je fais une boucle ou quelque chose de "fantaisiste" comme ça, le script donne une erreur. Voici un exemple si mon script fonctionne actuellement:
#!/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
Dès que j'ai eu une fonction comme celle-ci:
####
# 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
}
... la connexion cesse de fonctionner. Ce qui me déroute, c'est que l'exécution de ce script avec * bash add_shortcut.sh * ou *./Add_shortcut.sh * fonctionne bien ...
Est-il possible que nous ne puissions pas créer de fonctions, d'analyser des tableaux ou quelque chose comme ça dans un script appelé par/etc/profile? Et dans ce cas, où ou comment puis-je exécuter un script de connexion pour tous les utilisateurs se connectant à l'ordinateur? Oh, par la façon dont j'utilise Ubuntu 12.04 LTS!
Merci d'avance et désolé pour mon anglais!
EDIT: Il y a une Pastebin du script. Je ne l'ajoute pas de manière contraignante car les commentaires du script sont en français donc ... eh bien, ça y est: http://Pastebin.com/71XzaBk6 .
Les trucs dans /etc/profile.d proviennent probablement de votre gestionnaire de fenêtres lorsque vous vous connectez, et qui utilise probablement/bin/sh, donc ciblez un shell POSIX, pas bash, pour y ajouter des scripts. Notez que [[
Ne se trouve pas dans les scripts qui s'y trouvent actuellement.
Donc,
[ ... ]
plutôt que [[ ... ]]
funcname() { ... }
sans le mot clé function
dash est un shell POSIX (uniquement), vous pouvez donc trouver dash man page handy
Commentaires sur http://Pastebin.com/71XzaBk6
Il s'agit de l'erreur principale: modifier
if [[ ! -f ~/.gtk-bookmarks ]]
à
if [ ! -f ~/.gtk-bookmarks ]
la fonction find_server_by_ip
peut être simplifiée:
findserverbyip() {
case "$(hostname -I)" in
*[0-9].33.9.[0-9]*) share_server=serverB ;;
*) share_server=serverA ;;
esac
}
De plus, ce commentaire est trompeur: la fonction ne renvoie rien, elle a un effet secondaire.
# Return : echo Server to use
autant supprimer la ligne Shebang: ce script n'est pas exécuté, il est sourcé.