Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

Totor a écrit :

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

Totor a écrit :

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 ?

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

xamaco a écrit :

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