#1 Le 11/11/2008, à 10:42
- ecatomb
Fonction non reconnu dans un script
Bonjour,
Voici en gros mon script:
remplace()
{
...
echo blabla
}
...
#il me semble que ce export était nécessaire
export -f remplace
sed -i "s/....../remplace \2 \4/e" fichier
Je n'ai pas mis de fonction main car je n'en vois pas l'utilité, le problème peut venir de là.
Voici le message d'erreur que j'ai sous ubuntu 8.10:
sh: remplace: not found
Pourtant le script marche très bien sous mandriva 2006 (je testais les différents distribution à l'époque) sous lequel j'ai fait ce script.
Je débute un peu dans les shell unix, donc j'ai surement fait des erreurs mais je ne la vois pas.
Merci d'avance
Hors ligne
#2 Le 11/11/2008, à 11:19
- Totor
Re : Fonction non reconnu dans un script
Salut !
en bash ça fonctionne ..
Si le sh n'est pas une obligation (puisqu'il semble que tu sois en bash), mets-toi en bash...
-- Lucid Lynx --
Hors ligne
#3 Le 11/11/2008, à 13:45
- ecatomb
Re : Fonction non reconnu dans un script
Salut !
en bash ça fonctionne ..
Si le sh n'est pas une obligation (puisqu'il semble que tu sois en bash), mets-toi en bash...
Normalement je suis bien en bash, j'ai ça sur la première ligne (j'avais oublié de l'indiquer)
#!/bin/bash
Hors ligne
#4 Le 13/11/2008, à 14:04
- ecatomb
Re : Fonction non reconnu dans un script
up
Hors ligne
#5 Le 13/11/2008, à 14:26
- Totor
Re : Fonction non reconnu dans un script
En es-tu vraiment sur ?
quand je lance une commande inconnue en bash, il me met : bash : <commande> : commande introuvable
alors que l'erreur que tu indiques est sh: remplace: not found
je ne connais pas le comportement de sed lorsqu'il fait appel à une fonction/commande externe. Il utilise peut-être le shell par défaut de l'utilisateur. Quel est le tient ?
Dernière modification par Totor (Le 13/11/2008, à 14:27)
-- Lucid Lynx --
Hors ligne
#6 Le 14/11/2008, à 10:55
- ecatomb
Re : Fonction non reconnu dans un script
En es-tu vraiment sur ?
quand je lance une commande inconnue en bash, il me met : bash : <commande> : commande introuvablealors que l'erreur que tu indiques est sh: remplace: not found
je ne connais pas le comportement de sed lorsqu'il fait appel à une fonction/commande externe. Il utilise peut-être le shell par défaut de l'utilisateur. Quel est le tient ?
Oui je suis sûr d'avoir
#!/bin/bash
et je trouve aussi que c'est bizarre.
J'ai vérifié dans le gestionnaire de paquet et le bash est pourtant bien installé ...
Comment peut-on savoir quel est le shell par défaut de l'utilisateur?
Hors ligne
#7 Le 14/11/2008, à 11:22
- xamaco
Re : Fonction non reconnu dans un script
J'ai vérifié dans le gestionnaire de paquet et le bash est pourtant bien installé ...
Comment peut-on savoir quel est le shell par défaut de l'utilisateur?
echo $SHELL
Hors ligne
#8 Le 14/11/2008, à 11:32
- Totor
Re : Fonction non reconnu dans un script
J'ai vérifié dans le gestionnaire de paquet et le bash est pourtant bien installé ...
Comment peut-on savoir quel est le shell par défaut de l'utilisateur?echo $SHELL
pas tout à fait car la variable SHELL correspond au type de shell en court.
Le shell par défaut de l'utilisateur peut être obtenu comme suis :
grep ^<tonuser> /etc/password|cut -d: -f7
mais il peut aussi être redéfini au moment de l'authentification de l'utilisateur :
Pour cela, regarder les fichiers :
- /etc/profile
- ~/.profile (s'il existe)
Cela dit, sed se base probablement sur le contenu de cette variable (SHELL)
Dernière modification par Totor (Le 14/11/2008, à 11:39)
-- Lucid Lynx --
Hors ligne
#9 Le 14/11/2008, à 11:44
- yohann
Re : Fonction non reconnu dans un script
a la limite le mieux est encore un echo $SHELL au debut du script comme ca tu seras certain du shell utiliser par le script.
sinon essaye des echo un peu partout (du moins au endroit strategique) histoire de savoir si c' est le remplace dans ton sed qui pose probleme ou la definition de la fonction
j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.
Hors ligne
#10 Le 14/11/2008, à 15:32
- ecatomb
Re : Fonction non reconnu dans un script
Dans le terminal:
echo $SHELL
me sort:
/bin/bash
grep ^<monuser> /etc/passwd | cut -d: -f7
me sort aussi:
/bin/bash
cat /etc/profile
me sort:
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1='\u@\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
umask 022
cat ~/.profile
me sort:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
J'ai testé le script en mettant des
echo $SHELL
dedans et ça m'affiche la même chose:
/bin/bash
Est-ce que la commande sed pourrait être différente suivant les version de linux?
Hors ligne