2017-08-11 7 views
1

J'ai un script bash disons foo.sh que dans cet exemple minimal ressemble à ceci:En passant plusieurs commandes script d'appel de temps

#!/bin/bash 
function __measure_time { 
    time "[email protected]" 
} 
__measure_time "$*" 

Ce que je veux faire est maintenant passer deux commandes à ce script sont censés être exécutés après l'autre et je veux mesurer le temps. Donc, fondamentalement, je fais quelque chose comme:

./foo.sh bash -c "echo 'ss' && sleep 1" 

Mais cela ne fonctionne pas comme je le veux. Je ne comprends pas le 's' de l'écho et le sommeil est fondamentalement ignoré. Y a-t-il un moyen de faire ce travail?

+0

Pour moi cela fonctionne bien. La seule modification que j'ai faite à la commande est préfixée avec './'. Donc, ce serait './foo.sh bash -c" echo ss && sleep 1 "' –

+0

En effet, on dirait que le script que j'ai eu est une ligne plus complexe que je ne le pensais. J'ai complètement oublié qu'il y a un appel de fonction avant l'appel du temps. Ce n'est pas moi mais j'essaie de l'utiliser. Va ajouter le code. – FlyingTeller

+0

le temps est utilisé pour chronométrer l'exécution d'un script et non une multitude de commandes. Autrement dit, le temps n'acceptera pas plus d'une commande en tant que paramètre. –

Répondre

0

Si vous voulez que les arguments de passer à travers correctement, vous devez appeler __measure_time avec "[email protected]", non "$*":

#!/bin/bash 
__measure_time() { #why the `function` syntax when you can be POSIX? 
    time "[email protected]" 
} 
__measure_time "[email protected]" 

"$*" rejoint tous les arguments sur le premier caractère de $IFS dans une chaîne. "[email protected]" est magique pour "donnez-moi tous les arguments, comme si chacun était cité séparément."

+0

Merci. Y at-il un avantage à utiliser $ * par opposition à $ @ qui pourrait justifier de ne pas le remplacer? – FlyingTeller

+0

@FlyingTeller Non – PSkocik