erreur de syntaxe près de jeton inattendu "& " (en utilisant “|&”)
J'ai une erreur de syntaxe près de jeton inattendu &
en suivant :
dans les scripts bash ses go comme ceci :
#!/bin/bash
var1=`(/usr/bin/time cdifonline -CD 186821 -ALL > /dev/null)|& grep real|awk '{print $2}'`
quand j'ai émettre cette commande cli-je obtenir un bon de sortie, le problème est alors d'appeler ce script je peux obtenir une sortie de var1
./check_cdifonline.sh: command substitution: line 2: syntax error near unexpected token `&'
./check_cdifonline.sh: command substitution: line 2: `(/usr/bin/time cdifonline -CD 186821 -ALL >/dev/null) | & grep real | awk '{print $2}''
Pourquoi êtes-vous
Parce que j'ai besoin d'analyser la valeur réelle de temps de commande et vous avez besoin d'envoyer sur la sortie stderr premier à obtenir une sortie de temps, il n'est pas possible
Votre question a été édité pour corriger la mise en forme, mais il y a toujours un peu bancales caractères à la fin du premier bloc de code. Vous pouvez corriger cela en éditant votre question, en supprimant le premier bloc de code et de le remplacer par un copier-coller de votre code, puis en sélectionnant le bloc et en cliquant sur le
&
ing la grep
? Vous êtes déjà à la tuyauterie de la sortie de grep
.Parce que j'ai besoin d'analyser la valeur réelle de temps de commande et vous avez besoin d'envoyer sur la sortie stderr premier à obtenir une sortie de temps, il n'est pas possible
Votre question a été édité pour corriger la mise en forme, mais il y a toujours un peu bancales caractères à la fin du premier bloc de code. Vous pouvez corriger cela en éditant votre question, en supprimant le premier bloc de code et de le remplacer par un copier-coller de votre code, puis en sélectionnant le bloc et en cliquant sur le
{}
à les mettre en forme dans le code (qui vient de tirets 4 colonnes).
OriginalL'auteur klerk | 2013-12-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la séquence
|&
à la pipe à la fois la sortie standard stdout et stderr d'un processus à un autre.Vous ne pouvez pas avoir un espace entre le
|
et la&
. (csh et tcsh permettre un espace; bash ne le fait pas.) Je soupçonne que vous arrive d'être de taper sans espace lorsque vous exécutez la commande de manière interactive; la syntaxe est la même de toute façon.Ce:
est le raccourci pour cette:
Mise à JOUR :
Avec bash 3.2.25, le
|&
jeton n'est pas reconnu; ont ajouté une nouvelle fonctionnalité dans bash 4.1. L'exécution de votre script avec l'ancienne bash, je reçois le même message d'erreur que vous faites.Pour rendre votre script compatible avec les anciennes versions de bash, il suffit de faire l'équivalent de redirection sans l'aide de la
|&
opérateur:D'autres améliorations: Utilisation
$(...)
plutôt que`...`
:Vous pouvez également intégrer les
grep
de recherche dans leawk
commande:Avertissement: je n'ai pas testé minutieusement ces au-delà de vérifier qu'ils fonctionnent sans erreurs de syntaxe.
Je ne vois toujours pas de différence entre
|&
et| &
. Est-il possible que/bin/bash
est une version différente de ce que vous êtes en cours d'exécution de manière interactive? Essayez/bin/bash --version
etecho $BASH_VERSION
.Je viens de copier et de coller le code de votre question et il a couru sur mon propre système. Il n'y a pas d'erreur. (Je n'ai pas le
cdifonline
de commande, mais cela ne devrait pas affecter les erreurs de syntaxe.) J'obtiens un message d'erreur si j'invoque commesh ./foo.bash
; comment exactement vous exécutez le script? Essayez de copier-coller le script de ta question dans un nouveau fichier et en cours d'exécution.non, c'est helples, comme je l'ai triste, tout est très bien cli mais quand appeler dans le script, j'obtiens cette erreur
Avez-vous essayé ce que j'ai proposé? Quelle est la version de bash utilisez-vous (
bash --version
)?bash --version GNU bash, version 3.00.0(2) libération (sparc-soleil-solaris2.6) Le Droit D'Auteur (C) 2004 Free Software Foundation, Inc.
OriginalL'auteur Keith Thompson
Essayer de changer pour:
Est-ce à eux seuls, une sortie?
/usr/bin/time cdifonline -CD 186821 -ALL >/dev/null
et si oui, quoi?/usr/bin/time cdifonline -CD 186821 -TOUS >/dev/null réel utilisateur 3.2 0.4 0.1 sys
(/usr/bin/time cdifonline -CD 186821 -TOUS > /dev/null)|& grep réel|awk '{print $2}' 1.3 en cas de problème sur le cli-je obtenir ce que je veux, j'ai juste besoin de ce script bash définir comme variable
OriginalL'auteur Jotne
Grâce Keith je n'ai pas de problèmes plus vous avez sauvé ma journée 🙂 donc le bash version était le problème et d'éviter de & j'ai pas d'erreur, merci aussi pour le réglage fin 🙂
si cela fonctionne avec mon bash version
OriginalL'auteur klerk