-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathxargs.txt
126 lines (112 loc) · 7.21 KB
/
xargs.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
┏━━━━━━━━━━━┓
┃ XARGS ┃
┗━━━━━━━━━━━┛
xargs [COMMANDES] #Execute COMMANDES en plaçant l'entrée standard comme un
#argument supplémentaire de COMMANDES à la fin de sa
#liste d'arguments. COMMANDES doit être une commande
#externe, ou être un builtin avec une version en
#commande externe.
#L'input de xargs doit donc être redirigé
#Si COMMANDES est omise, echo par defaut.
#Le principal intérêt est de simuler la redirection de
#l'input de COMMANDES ne le pouvant pas. L'input doit
#alors être des noms de fichier si COMMANDES prend
#comme argument des FILE (alors qu'une pipe pour ces
#mêmes COMMANDES exigerait que l'entrée standard soit
#le contenu des FILE et non leurs noms)
#
#Difference avec une simple redirection de l'input :
# - Divise l'entrée standard en plusieurs INPUTS en
# fonction du delimiteur (\n par defaut)
# - Supprime les lignes vides, a moins que -0 ou -d
# ne soit active
# - Puis divise chaque INPUT en ARGUMENTS (utile que
# pour -n) en fonction de l'IFS (whitespaces par
# defaut), a moins que -0 ou -d ne soit active,
# auquel cas aucune division n'est faite (1 INPUT =
# 1 ARGUMENT) car les whitespaces sont consideres
# tels quels
# - Il est possible d'echapper les delimiteurs lors de
# ces deux divisions a l'aide de "\" et de
# guillemets a moins que -0 ou -d ne soit active
#
#Puis invoque COMMANDES avec :
# - par defaut l'ensemble des INPUTS pour une seule
# invocation de COMMANDES (meilleure performance,
# mais peut dépasser la limite du nombre d'octets
# par ligne de commande (128 Ko))
# - avec -I, une invocation de COMMANDES par INPUT
# - avec -L "NOMBRE", une invocation de CMANDE2 a
# chaque "NOMBRE" INPUTS
# - avec -n "NOMBRE", une invocation de CMANDE2 a
# chaque "NOMBRE" ARGUMENTS
#
#Probleme : echo (CMANDE2 par defaut) n'imprime pas les
#newlines ou null si -0 active, le resultat semble
#donc concatene. Solution, utiliser -I afin qu'echo
#s'execute plusieurs fois, car il insert une newline a
#chaque invocation de lui-meme
#
#Attention : certaines commandes ne donnent pas de
#newlines en shell interactif (output final) mais si en
#shell non-interactif (redirection de l'output avec un
#pipe), par exemple ls sans option
#
#Interets possibles de xargs :
# - "Inputer" des commandes ne le pouvant pas
# normalement. A cet fin, on peut aussi utiliser :
# COMMANDES1 | COMMANDES2 "$(cat -)"
# - Bien traiter un input pouvant contenir des
# whitespaces facheux
# - Utiliser -I pour faire reference a l'input
# - Utiliser -L et -n pour jouer avec l'input
# - Performance avec -p ou en lancant tous les inputs
# d'un coup (sans -I, -n ou -L)
SINGLE QUOTES ==> #Passer un output à xargs ayant une single quote non
#échappée (ce qui peut arriver avec -a FILE) provoque
#une erreur
LIMITE SUR LA TAILLE #Il y a une limite de SIZE octets que l'on peut voir
DE L'ARGUMENTS ==> #avec xargs --show-limits (ligne contenant le mot
#"buffer"). Pour moi, c'est 128 Ko. La limite fait
#planter xargs dans deux cas :
# 1) si un INPUT a une taille supérieure à SIZE octets,
# avec l'option -i, -I, -0, -L et -d (si DELIM n'est
# pas un whitespace)
# 2) si un ARGUMENT a une taille supérieure à SIZE
# octets, si aucune des options précédentes n'est
# invoquée, dont option -n et -a. Cependant, un
# newline sera inséré après SIZE octets.
--null #Null devient le delimiteur d'INPUTS et non newline.
-0 #Voir ci-dessus pour les changements operes dans la
#division d'INPUTS (Voir null_newline.txt)
--delimiter="DELIM" #"DELIM" devient le delimiteur d'INPUTS et non newline
-d "DELIM" #Voir ci-dessus pour les changements operes dans la
#division d'INPUTS
-i ["STRING"] #Remplace chaque occurrence de "STRING" par l'INPUT
--replace[="STRING"] #courant. {} par defaut avec -i. Implies -x and -L 1.
-I "STRING" #Preferer -I.
-l ["NOMBRE"]
--max-lines[="NOMBRE"] #Provoque une invocation de CMANDE2 a chaque "NOMBRE"
-L "NOMBRE" #INPUTS. 1 par defaut avec -l. Implies -x. Preferer -L
--max-args="NOMBRE" #Provoque une invocation de CMANDE2 a chaque "NOMBRE"
-n "NOMBRE" #ARGUMENTS. Implies -x.
--arg-file="FILE"
-a "FILE" #Read input from "FILE"
--interactive
-p #Prompt the user about whether to run each command
--no-run-if-empty #Si l'input does not contain any nonblanks, do not run
-r #the command. Normally, the command is run once even
#if there is no input.
--max-chars="NOMBRE"
-s "NOMBRE" #Use at most "NOMBRE" characters pour chaque INPUT
--show-limits #Display the limits on the input length due to the OS,
#xargs et l'option -s
-x #Interrompt xargs avec une message d'erreur si ces
--exit #dernières limites sont dépassées (défaut ??)
-E STRING
-eSTRING #Si un input est égal à seulement STRING, xargs
-eof=STRING #s'interrompt
--max-procs="NOMBRE" #Run up to "NOMBRE" processes at a time (default is 1)
-P "NOMBRE" #If 0, as many processes as possible will be run.
#Ne marchera que si l'option -n est specifiee pour
#pouvoir permettre l'attribution a differents processes