J'ai un script Perl qui me donne une liste définie de nombres aléatoires qui correspondent aux lignes d'un fichier. Ensuite, je veux extraire ces lignes du fichier en utilisant sed
.
#!/bin/bash
count=$(cat last_queries.txt | wc -l)
var=$(perl test.pl test2 $count)
La variable var
retourne une sortie comme: cat last_queries.txt | sed -n '12p;500p;700p'
. Le problème est que je ne peux pas exécuter cette dernière commande. J'ai essayé avec $var
, mais la sortie n'est pas correcte (si je lance manuellement la commande, cela fonctionne bien, donc pas de problème). Quelle est la bonne façon de procéder?
PS: Bien sûr, je pourrais faire tout le travail en Perl, mais j'essaie d'apprendre de cette façon, car cela pourrait m'aider dans d'autres situations.
$($cmd))
échec. Il dit toujours que la commande n'a pas été trouvée. Merci!juste avec votre fichier à la place.
Dans cet exemple, j'ai utilisé le fichier / etc / password, en utilisant la variable spéciale
${RANDOM}
(que j'ai apprise ici), et l'sed
expression que vous aviez, la seule différence est que j'utilise des guillemets doubles au lieu de simples pour permettre l'expansion de la variable.la source
Dans le cas où vous avez plusieurs variables contenant les arguments d'une commande que vous exécutez, et pas seulement une seule chaîne, vous ne devez pas utiliser eval directement, car cela échouera dans le cas suivant:
Résultat:
Notez que même si "Some arg" a été passé comme argument unique,
eval
lisez-le comme deux.Au lieu de cela, vous pouvez simplement utiliser la chaîne comme commande elle-même:
Notez la différence entre la sortie de
eval
et la nouvelleeval_command
fonction:Résultat:
la source
eval 'echo_arguments arg1 arg2 "Some arg"'
. Ensuite, la sortie sera comme dans votre deuxième exemple.