je voudrai réaliser l'opération suivante : j'ai une commande que je nommerai
ma_commande qui me retourne un chemin absolu (/home/user/fred par exemple). Je
voudrai copier le contenu de ce répertoire dans le répertoire "toto". Mon idée
est quelque chose comme ça :
ma_commande | cp $1 toto
mais ce système avec $1 ne fonctionne pas. Comment faire pour appeler le
résultat de "ma_commande" avec cp ?
Voilà, en espérant avoir été clair
Fred.
--
Ce message a été posté via la plateforme Web club-Internet.fr
This message has been posted by the Web platform club-Internet.fr
je voudrai réaliser l'opération suivante : j'ai une commande que je nommerai ma_commande qui me retourne un chemin absolu (/home/user/fred par exemple). Je voudrai copier le contenu de ce répertoire dans le répertoire "toto". Mon idée est quelque chose comme ça :
cp "`ma_commande`"/* toto
-- DINH V. Hoa,
"Ma tuxitude me beastifie" -- sunZ
je voudrai réaliser l'opération suivante : j'ai une commande que je nommerai
ma_commande qui me retourne un chemin absolu (/home/user/fred par exemple). Je
voudrai copier le contenu de ce répertoire dans le répertoire "toto". Mon idée
est quelque chose comme ça :
je voudrai réaliser l'opération suivante : j'ai une commande que je nommerai ma_commande qui me retourne un chemin absolu (/home/user/fred par exemple). Je voudrai copier le contenu de ce répertoire dans le répertoire "toto". Mon idée est quelque chose comme ça :
cp "`ma_commande`"/* toto
-- DINH V. Hoa,
"Ma tuxitude me beastifie" -- sunZ
Stephane CHAZELAS
Le 14 Oct 2003 09:33:47 GMT, Frederic écrivait : [...]
je voudrai réaliser l'opération suivante : j'ai une commande que je nommerai ma_commande qui me retourne un chemin absolu (/home/user/fred par exemple). Je voudrai copier le contenu de ce répertoire dans le répertoire "toto". Mon idée est quelque chose comme ça :
ma_commande | cp $1 toto
Vois du coté de xargs(1). Le "|" c'est pour connecter une sortie standard à une entree standard, pas pour passer des arguments sur la ligne de commande, xargs fait la conversion entre ces deux modes de communication inter-commandes.
Tu peux aussi faire:
cp -- "$(ma_commande)" toto
ou cp -- "`ma_commande`" toto si tu as un shell très ancien.
Ça utilise aussi un pipe(2) internalement, c'est le shell qui lit l'autre bout du pipe et fait un argument à cp de ce qu'il a lu.
-- Stéphane
Le 14 Oct 2003 09:33:47 GMT, Frederic <martinof@club-internet.fr> écrivait :
[...]
je voudrai réaliser l'opération suivante : j'ai une commande que je nommerai
ma_commande qui me retourne un chemin absolu (/home/user/fred par exemple). Je
voudrai copier le contenu de ce répertoire dans le répertoire "toto". Mon idée
est quelque chose comme ça :
ma_commande | cp $1 toto
Vois du coté de xargs(1). Le "|" c'est pour connecter une sortie
standard à une entree standard, pas pour passer des arguments
sur la ligne de commande, xargs fait la conversion entre ces
deux modes de communication inter-commandes.
Tu peux aussi faire:
cp -- "$(ma_commande)" toto
ou
cp -- "`ma_commande`" toto
si tu as un shell très ancien.
Ça utilise aussi un pipe(2) internalement, c'est le shell qui
lit l'autre bout du pipe et fait un argument à cp de ce qu'il a
lu.
Le 14 Oct 2003 09:33:47 GMT, Frederic écrivait : [...]
je voudrai réaliser l'opération suivante : j'ai une commande que je nommerai ma_commande qui me retourne un chemin absolu (/home/user/fred par exemple). Je voudrai copier le contenu de ce répertoire dans le répertoire "toto". Mon idée est quelque chose comme ça :
ma_commande | cp $1 toto
Vois du coté de xargs(1). Le "|" c'est pour connecter une sortie standard à une entree standard, pas pour passer des arguments sur la ligne de commande, xargs fait la conversion entre ces deux modes de communication inter-commandes.
Tu peux aussi faire:
cp -- "$(ma_commande)" toto
ou cp -- "`ma_commande`" toto si tu as un shell très ancien.
Ça utilise aussi un pipe(2) internalement, c'est le shell qui lit l'autre bout du pipe et fait un argument à cp de ce qu'il a lu.
-- Stéphane
Jean-Marc Bourguet
Frederic writes:
ma_commande | cp $1 toto
Pour tout les shells cp `ma_commande` toto
Alternative pour les bournes pas trop antiques cp $(ma_commande) toto
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Frederic <martinof@club-internet.fr> writes:
ma_commande | cp $1 toto
Pour tout les shells
cp `ma_commande` toto
Alternative pour les bournes pas trop antiques
cp $(ma_commande) toto
A+
--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Alternative pour les bournes pas trop antiques cp $(ma_commande) toto
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Stephane CHAZELAS
Le 14 Oct 2003 11:50:19 +0200, Jean-Marc Bourguet écrivait :
Frederic writes:
ma_commande | cp $1 toto
Pour tout les shells cp `ma_commande` toto
Note qu'au contraire de cp "`ma_commande`" toto le shell accomplit des taches supplémentaires. Après avoir obtenu le résultat de ma_commande, il le découpe (suivant IFS [word splitting]) et genère des noms de fichiers à partir des wildcard contenus dans les bouts découpés).
IFS=: cp `echo '*.txt:*.html'` toto copie les fichiers texte et html du répertoire courant dans toto.
cp "`echo '*.txt:*.html'`" toto copie le fichier html "*.txt:*.html" vers "toto".
Par défaut, IFS contient tous les charactères blancs.
Alternative pour les bournes pas trop antiques cp $(ma_commande) toto
Si le shell reconnait $(...), alors ce n'est pas un shell Bourne, un shell Bourne-like, certes, mais pas un shell Bourne.
On ne trouve guère plus de shells Bourne en tant que /bin/sh de nos jours, à part sur Solaris où il est préférable d'utiliser /usr/xpg4/bin/sh qui est un shell POSIX comme la plupart des /bin/sh des unix récents.
-- Stéphane
Le 14 Oct 2003 11:50:19 +0200, Jean-Marc Bourguet <jm@bourguet.org> écrivait :
Frederic <martinof@club-internet.fr> writes:
ma_commande | cp $1 toto
Pour tout les shells
cp `ma_commande` toto
Note qu'au contraire de cp "`ma_commande`" toto
le shell accomplit des taches supplémentaires. Après avoir
obtenu le résultat de ma_commande, il le découpe (suivant IFS
[word splitting]) et genère des noms de fichiers à partir des
wildcard contenus dans les bouts découpés).
IFS=:
cp `echo '*.txt:*.html'` toto
copie les fichiers texte et html du répertoire courant dans
toto.
cp "`echo '*.txt:*.html'`" toto
copie le fichier html "*.txt:*.html" vers "toto".
Par défaut, IFS contient tous les charactères blancs.
Alternative pour les bournes pas trop antiques
cp $(ma_commande) toto
Si le shell reconnait $(...), alors ce n'est pas un shell
Bourne, un shell Bourne-like, certes, mais pas un shell Bourne.
On ne trouve guère plus de shells Bourne en tant que /bin/sh de
nos jours, à part sur Solaris où il est préférable d'utiliser
/usr/xpg4/bin/sh qui est un shell POSIX comme la plupart des
/bin/sh des unix récents.
Le 14 Oct 2003 11:50:19 +0200, Jean-Marc Bourguet écrivait :
Frederic writes:
ma_commande | cp $1 toto
Pour tout les shells cp `ma_commande` toto
Note qu'au contraire de cp "`ma_commande`" toto le shell accomplit des taches supplémentaires. Après avoir obtenu le résultat de ma_commande, il le découpe (suivant IFS [word splitting]) et genère des noms de fichiers à partir des wildcard contenus dans les bouts découpés).
IFS=: cp `echo '*.txt:*.html'` toto copie les fichiers texte et html du répertoire courant dans toto.
cp "`echo '*.txt:*.html'`" toto copie le fichier html "*.txt:*.html" vers "toto".
Par défaut, IFS contient tous les charactères blancs.
Alternative pour les bournes pas trop antiques cp $(ma_commande) toto
Si le shell reconnait $(...), alors ce n'est pas un shell Bourne, un shell Bourne-like, certes, mais pas un shell Bourne.
On ne trouve guère plus de shells Bourne en tant que /bin/sh de nos jours, à part sur Solaris où il est préférable d'utiliser /usr/xpg4/bin/sh qui est un shell POSIX comme la plupart des /bin/sh des unix récents.
-- Stéphane
Jean-Marc Bourguet
Stephane CHAZELAS writes:
On ne trouve guère plus de shells Bourne en tant que /bin/sh de nos jours, à part sur Solaris où il est préférable d'utiliser /usr/xpg4/bin/sh qui est un shell POSIX comme la plupart des /bin/sh des unix récents.
Petite question, est qu'il y a un moyen simple de faire un script raisonnablement portable -- disons Solaris, HP-UX, AIX, Linux recent -- qui depende de fonctionnalite POSIX a part l'utilisation d'un wrapper du genre
On ne trouve guère plus de shells Bourne en tant que /bin/sh de nos
jours, à part sur Solaris où il est préférable d'utiliser
/usr/xpg4/bin/sh qui est un shell POSIX comme la plupart des /bin/sh
des unix récents.
Petite question, est qu'il y a un moyen simple de faire un script
raisonnablement portable -- disons Solaris, HP-UX, AIX, Linux
recent -- qui depende de fonctionnalite POSIX a part l'utilisation
d'un wrapper du genre
On ne trouve guère plus de shells Bourne en tant que /bin/sh de nos jours, à part sur Solaris où il est préférable d'utiliser /usr/xpg4/bin/sh qui est un shell POSIX comme la plupart des /bin/sh des unix récents.
Petite question, est qu'il y a un moyen simple de faire un script raisonnablement portable -- disons Solaris, HP-UX, AIX, Linux recent -- qui depende de fonctionnalite POSIX a part l'utilisation d'un wrapper du genre
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Laurent Wacrenier
Jean-Marc Bourguet écrit:
Petite question, est qu'il y a un moyen simple de faire un script raisonnablement portable -- disons Solaris, HP-UX, AIX, Linux recent -- qui depende de fonctionnalite POSIX a part l'utilisation d'un wrapper du genre
On peut utiliser "command -p" pour executer une commande avec le PATH contenant les utilitaires standards.
La norme donne l'exemple suivant pour rechercher le shell POSIX :
# # Get list of paths to check # Sifs=$IFS IFS=: set $(getconf PATH) IFS=$Sifs # # Check each path for 'sh' # for i in $@ do if [ -f ${i}/sh ]; then Pshell=${i}/sh fi done
Jean-Marc Bourguet <jm@bourguet.org> écrit:
Petite question, est qu'il y a un moyen simple de faire un script
raisonnablement portable -- disons Solaris, HP-UX, AIX, Linux
recent -- qui depende de fonctionnalite POSIX a part l'utilisation
d'un wrapper du genre
On peut utiliser "command -p" pour executer une commande avec le PATH
contenant les utilitaires standards.
La norme donne l'exemple suivant pour rechercher le shell POSIX :
#
# Get list of paths to check
#
Sifs=$IFS
IFS=:
set $(getconf PATH)
IFS=$Sifs
#
# Check each path for 'sh'
#
for i in $@
do
if [ -f ${i}/sh ];
then
Pshell=${i}/sh
fi
done
Petite question, est qu'il y a un moyen simple de faire un script raisonnablement portable -- disons Solaris, HP-UX, AIX, Linux recent -- qui depende de fonctionnalite POSIX a part l'utilisation d'un wrapper du genre
On peut utiliser "command -p" pour executer une commande avec le PATH contenant les utilitaires standards.
La norme donne l'exemple suivant pour rechercher le shell POSIX :
# # Get list of paths to check # Sifs=$IFS IFS=: set $(getconf PATH) IFS=$Sifs # # Check each path for 'sh' # for i in $@ do if [ -f ${i}/sh ]; then Pshell=${i}/sh fi done
Stephane CHAZELAS
Le 14 Oct 2003 14:57:08 +0200, Jean-Marc Bourguet écrivait :
Stephane CHAZELAS writes:
On ne trouve guère plus de shells Bourne en tant que /bin/sh de nos jours, à part sur Solaris où il est préférable d'utiliser /usr/xpg4/bin/sh qui est un shell POSIX comme la plupart des /bin/sh des unix récents.
Petite question, est qu'il y a un moyen simple de faire un script raisonnablement portable -- disons Solaris, HP-UX, AIX, Linux recent -- qui depende de fonctionnalite POSIX a part l'utilisation d'un wrapper du genre
oldPath=$PATH PATH=`getconf PATH`
Et encore, qui te dit que tu as là le "getconf" du système, POSIX n'a pas standardisé le chemin du getconf qui te permet de connaitre le chemin des autres commandes...
export PATH shell=`which sh`
De préférence, ne pas utiliser "which", faut se coltiner la recherche du PATH à la main.
Eh non, rien de beaucoup plus simple que ça, et c'est là que Solaris fait ch***.
On peut se contenter d'un header comme wrapper:
: if test "x$0-$$" != "x$SKIP_WRAP"; then SKIP_WRAP=$0-$$ export SKIP_WRAP for sh in /usr/xpg4/bin /usr/posix/bin /bin /usr/bin; do test -x "$sh/sh" && exec "$sh/sh" "$0" ${1+"$@"} done fi
# le script
-- Stéphane
Le 14 Oct 2003 14:57:08 +0200, Jean-Marc Bourguet <jm@bourguet.org> écrivait :
On ne trouve guère plus de shells Bourne en tant que /bin/sh de nos
jours, à part sur Solaris où il est préférable d'utiliser
/usr/xpg4/bin/sh qui est un shell POSIX comme la plupart des /bin/sh
des unix récents.
Petite question, est qu'il y a un moyen simple de faire un script
raisonnablement portable -- disons Solaris, HP-UX, AIX, Linux
recent -- qui depende de fonctionnalite POSIX a part l'utilisation
d'un wrapper du genre
oldPath=$PATH
PATH=`getconf PATH`
Et encore, qui te dit que tu as là le "getconf" du système,
POSIX n'a pas standardisé le chemin du getconf qui te permet de
connaitre le chemin des autres commandes...
export PATH
shell=`which sh`
De préférence, ne pas utiliser "which", faut se coltiner la
recherche du PATH à la main.
Eh non, rien de beaucoup plus simple que ça, et c'est là que
Solaris fait ch***.
On peut se contenter d'un header comme wrapper:
:
if test "x$0-$$" != "x$SKIP_WRAP"; then
SKIP_WRAP=$0-$$ export SKIP_WRAP
for sh in /usr/xpg4/bin /usr/posix/bin /bin /usr/bin; do
test -x "$sh/sh" && exec "$sh/sh" "$0" ${1+"$@"}
done
fi
Le 14 Oct 2003 14:57:08 +0200, Jean-Marc Bourguet écrivait :
Stephane CHAZELAS writes:
On ne trouve guère plus de shells Bourne en tant que /bin/sh de nos jours, à part sur Solaris où il est préférable d'utiliser /usr/xpg4/bin/sh qui est un shell POSIX comme la plupart des /bin/sh des unix récents.
Petite question, est qu'il y a un moyen simple de faire un script raisonnablement portable -- disons Solaris, HP-UX, AIX, Linux recent -- qui depende de fonctionnalite POSIX a part l'utilisation d'un wrapper du genre
oldPath=$PATH PATH=`getconf PATH`
Et encore, qui te dit que tu as là le "getconf" du système, POSIX n'a pas standardisé le chemin du getconf qui te permet de connaitre le chemin des autres commandes...
export PATH shell=`which sh`
De préférence, ne pas utiliser "which", faut se coltiner la recherche du PATH à la main.
Eh non, rien de beaucoup plus simple que ça, et c'est là que Solaris fait ch***.
On peut se contenter d'un header comme wrapper:
: if test "x$0-$$" != "x$SKIP_WRAP"; then SKIP_WRAP=$0-$$ export SKIP_WRAP for sh in /usr/xpg4/bin /usr/posix/bin /bin /usr/bin; do test -x "$sh/sh" && exec "$sh/sh" "$0" ${1+"$@"} done fi
# le script
-- Stéphane
Stephane CHAZELAS
Le Tue, 14 Oct 2003 13:24:16 +0000 (UTC), Laurent Wacrenier écrivait : [...]
shell=`PATH='getconf PATH' which sh`
shell=`PATH=`getconf PATH` which sh` encore faut-il avoir le bon getconf.
Au passage, which n'est pas POSIX.
export PATH
inutile de faire export après chaque affectation
Avec certains Bourne shells, si.
La norme donne l'exemple suivant pour rechercher le shell POSIX :
# # Get list of paths to check # Sifs=$IFS IFS=: set $(getconf PATH)
On perd les arguments et ce n'est pas une syntaxe Bourne, à quoi bon.
IFS=$Sifs # # Check each path for 'sh' # for i in $@ do if [ -f ${i}/sh ]; then Pshell=${i}/sh fi done
??? Ça retourne le dernier "sh" dans le PATH au lieu du premier.
J'aurais plutot fait:
Sifs=$IFS ${IFS+:} unset Sifs IFS=: for i in `getconf PATH` do Pshell=$i/sh [ -x "$Pshell" ] && break done IFS=$Sifs ${Sifs+:} unset IFS
(pas testé) -- Stéphane
Le Tue, 14 Oct 2003 13:24:16 +0000 (UTC), Laurent Wacrenier <lwa@teaser> écrivait :
[...]
shell=`PATH='getconf PATH' which sh`
shell=`PATH=`getconf PATH` which sh`
encore faut-il avoir le bon getconf.
Au passage, which n'est pas POSIX.
export PATH
inutile de faire export après chaque affectation
Avec certains Bourne shells, si.
La norme donne l'exemple suivant pour rechercher le shell POSIX :
#
# Get list of paths to check
#
Sifs=$IFS
IFS=:
set $(getconf PATH)
On perd les arguments et ce n'est pas une syntaxe Bourne, à quoi
bon.
IFS=$Sifs
#
# Check each path for 'sh'
#
for i in $@
do
if [ -f ${i}/sh ];
then
Pshell=${i}/sh
fi
done
??? Ça retourne le dernier "sh" dans le PATH au lieu du
premier.
J'aurais plutot fait:
Sifs=$IFS
${IFS+:} unset Sifs
IFS=:
for i in `getconf PATH`
do
Pshell=$i/sh
[ -x "$Pshell" ] && break
done
IFS=$Sifs
${Sifs+:} unset IFS
Le 14 Oct 2003 14:15:55 GMT, Stephane CHAZELAS écrivait : [...]
inutile de faire export après chaque affectation
Avec certains Bourne shells, si. [...]
Il se pourrait meme que ce soit pour tous les Bourne shells: http://www.in-ulm.de/~mascheck/bourne/common.html
-- Stéphane
Jean-Marc Bourguet
Laurent Wacrenier <lwa@ teaser . fr> writes:
Jean-Marc Bourguet écrit:
Petite question, est qu'il y a un moyen simple de faire un script raisonnablement portable -- disons Solaris, HP-UX, AIX, Linux recent -- qui depende de fonctionnalite POSIX a part l'utilisation d'un wrapper du genre
On peut utiliser "command -p" pour executer une commande avec le PATH contenant les utilitaires standards.
La norme donne l'exemple suivant pour rechercher le shell POSIX :
# # Get list of paths to check # Sifs=$IFS IFS=: set $(getconf PATH) IFS=$Sifs # # Check each path for 'sh' # for i in $@ do if [ -f ${i}/sh ]; then Pshell=${i}/sh fi done
Si on ne veut pas deux fichiers, on arrive donc a
if [ "X$1" != "X-inPosixShell" ] ; then Sifs=$IFS IFS=: Pshell="" for i in `command -p getconf PATH` ; do if [ -x "${i}/sh" ] ; then Pshell=${i}/sh break fi done IFS=$Sifs if [ "X$Pshell" != "X" ] ; then exec "$Pshell" -- "$0" -inPosixShell "$@" fi unset -v Sifs Pshell fi
if [ "$1" = "-inPosixShell" ] ; then shift fi
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Laurent Wacrenier <lwa@ teaser . fr> writes:
Jean-Marc Bourguet <jm@bourguet.org> écrit:
Petite question, est qu'il y a un moyen simple de faire un script
raisonnablement portable -- disons Solaris, HP-UX, AIX, Linux
recent -- qui depende de fonctionnalite POSIX a part l'utilisation
d'un wrapper du genre
On peut utiliser "command -p" pour executer une commande avec le PATH
contenant les utilitaires standards.
La norme donne l'exemple suivant pour rechercher le shell POSIX :
#
# Get list of paths to check
#
Sifs=$IFS
IFS=:
set $(getconf PATH)
IFS=$Sifs
#
# Check each path for 'sh'
#
for i in $@
do
if [ -f ${i}/sh ];
then
Pshell=${i}/sh
fi
done
Si on ne veut pas deux fichiers, on arrive donc a
if [ "X$1" != "X-inPosixShell" ] ; then
Sifs=$IFS
IFS=:
Pshell=""
for i in `command -p getconf PATH` ; do
if [ -x "${i}/sh" ] ; then
Pshell=${i}/sh
break
fi
done
IFS=$Sifs
if [ "X$Pshell" != "X" ] ; then
exec "$Pshell" -- "$0" -inPosixShell "$@"
fi
unset -v Sifs Pshell
fi
if [ "$1" = "-inPosixShell" ] ; then
shift
fi
A+
--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Petite question, est qu'il y a un moyen simple de faire un script raisonnablement portable -- disons Solaris, HP-UX, AIX, Linux recent -- qui depende de fonctionnalite POSIX a part l'utilisation d'un wrapper du genre
On peut utiliser "command -p" pour executer une commande avec le PATH contenant les utilitaires standards.
La norme donne l'exemple suivant pour rechercher le shell POSIX :
# # Get list of paths to check # Sifs=$IFS IFS=: set $(getconf PATH) IFS=$Sifs # # Check each path for 'sh' # for i in $@ do if [ -f ${i}/sh ]; then Pshell=${i}/sh fi done
Si on ne veut pas deux fichiers, on arrive donc a
if [ "X$1" != "X-inPosixShell" ] ; then Sifs=$IFS IFS=: Pshell="" for i in `command -p getconf PATH` ; do if [ -x "${i}/sh" ] ; then Pshell=${i}/sh break fi done IFS=$Sifs if [ "X$Pshell" != "X" ] ; then exec "$Pshell" -- "$0" -inPosixShell "$@" fi unset -v Sifs Pshell fi
if [ "$1" = "-inPosixShell" ] ; then shift fi
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org