2015-09-20 2 views
1

Comment forcer la sortie de la requête dans un fichier à partir d'un script BASH?bash, comment stdout vers le fichier

J'ai essayé

> file.txt 
| >> file.txt 

et quelques autres

Je garde souffler les erreurs de syntaxe ou tout simplement ne fonctionnera pas.

find fixed/pdf/ -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "Ascend"' \; | 2>&1 dump.txt 
+5

Au lieu de '| 2> & 1 dump.txt' try '> dump.txt 2> & 1' – anubhava

+0

@doh Qu'est-ce que' find fixed/pdf/-name '* .pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label = "{}" --color "Monter" '\; 'produire sans la redirection? – BroSlow

Répondre

2

Vous pouvez utiliser:

find fixed/pdf/ -name '*.pdf' -exec sh -c 'pdftotext "$1" - | 
    grep --with-filename --label="$1" --color "Ascend"' - '{}' \; > dump.txt 2>&1 

réacheminer à la fois stdout et stderr à votre fichier dump.txt.

+2

Notez que '{}' n'est pas destiné à être utilisé de cette façon! Il est très peu sûr et soumet la commande à l'injection de code. Avec près de 300k rep, vous devriez aussi le mentionner et montrer comment utiliser '{}' correctement ';)'. D'ailleurs, c'est aussi faux, comme POSIX spécifie: _Si un utilitaire_name ou une chaîne d'argument contient les deux caractères "{}", mais pas seulement les deux caractères "{}", il est défini par l'implémentation si find remplace ces deux caractères ou utilise le chaîne sans changement._ –

+1

Merci, oui c'est un point très valable. Je l'ai édité maintenant. – anubhava