Il se passe quoi si tu changes == en = ? Le premier n'est pas standard, le second si. Si ton shell système n'est pas bash mais par exemple dash, ça peut expliquer que le test renvoie une erreur…
Cela semble fonctionner mais uniquement sur certaines variables exposées par Puppet. Un grep rapide dans la configuration Puppet utilisée pour l'infrastructure Debian (dsa-puppet.git) donne ces couples occurrence/variable :
Cela ressemble beaucoup à ce qu'on peut configurer dans /etc/puppet/puppet.conf !
Dans le cas ldapserver, on pourrait se poser la question d'une éventuelle variable « sortie du chapeau », mais c'est également défini dans Puppet. Dans 4.8.2 que j'ai sous la main, c'est via un appel define_settings dans lib/puppet/defaults.rb.
(Et si on se pose la question de tricher en ajoutant un test = youhou dans la section [agent] de la configuration Puppet, ça semble être ignoré.)
Un problème de droits sur un ou plusieurs fichiers/répertoires ? Ce serait plutôt simple à corriger, plutôt qu'un éventuel de système de fichiers/disques… Les « I/O errors », ça fait toujours un peu peur…
Voir aussi :
--ignore-errors
Tells --delete to go ahead and delete files even when there are I/O errors.
Je partirais plutôt sur chmod o-rx /home/* ou chmod o-rwx /home/*.
Je ne vois pas trop pourquoi on aurait w pour o, mais bon la deuxième commande permet d'être absolument certain.
Pas besoin d'aller modifier tout le monde récursivement si x est absent de chaque répertoire utilisateur.
Et surtout les fichiers créés par la suite (probablement avec un umask tout aussi permissif que les permissions initiales) ne seront pas accessibles non plus…
Je note que ça n'est pas supporté par iptables-translate (ou sa variante iptables-restore-translate), puisque la commande en question est recopiée comme telle en sortie, préfixée par #.
La page de manuel contient :
LIMITATIONS
Some (few) extensions may be not supported (or fully-supported) for whatever reason (for example, they were considered obsolete, or we didn't have the time to work on them).
Dans les sources iptables, je note qu'il n'y a pas de fichier extensions/libipt_TTL.txlate… Ce qui semble confirmer qu'il n'est pas prévu de proposer de traduction automatique de règle pour la cible TTL, implémentée dans le noyau par :
config NETFILTER_XT_TARGET_HL
tristate '"HL" hoplimit target support'
depends on IP_NF_MANGLE || IP6_NF_MANGLE
depends on NETFILTER_ADVANCED
---help---
This option adds the "HL" (for IPv6) and "TTL" (for IPv4)
targets, which enable the user to change the
hoplimit/time-to-live value of the IP header.
While it is safe to decrement the hoplimit/TTL value, the
modules also allow to increment and set the hoplimit value of
the header to arbitrary values. This is EXTREMELY DANGEROUS
since you can easily create immortal packets that loop
forever on the network.
Et mes recherches semblent suggérer que la gestion TTL n'est prévue que côté matching…
Déjà vu des blagues similaires sur une machine où on essayait de configurer un VPN. Au final, iptables (c'était il y a quelques années déjà) renvoyait des erreurs similaires sur la gestion des routes et du forwarding, mais le problème fondamental était que lancer ces commandes nécessitait de charger des modules noyau. Or cette machine avait un nouveau noyau, n'avait pas encore redémarré dessus, et le chargement de modules échouait.
Bref, je suggère de vérifier dmesg et assimilés. Quant au noyau OVH, je ne suis pas sûr de comprendre pourquoi il faut se fader ce genre de choses…
Je ne vois pas trop le rapport avec dpkg. Si tu es sur une distribution (basée sur) Debian, c'est l'installation et la configuration du paquet locales qui permettent de jouer sur le contenu des fichiers /etc/environment et /etc/default/locale. Sur le même système que précédemment, /etc/environment est vide et le /etc/default/locale contient :
# File generated by update-locale
LANG=en_GB.UTF-8
LANGUAGE="en_GB:en"
(Cf. dpkg-reconfigure locales pour changer la configuration et le contenu de ce fichier par effet de bord.)
Le contenu que tu cites ressemble à une tentative de la personne qui a buildé ton image de faire disparaître toutes les warnings (notamment niveau Perl) concernant des locales non configurées, en positionnant cette variable une seule fois dans ce fichier. Ça devrait probablement ne pas rester dans ce fichier une fois l'image préparée… (Mais je joue aux devinettes, je peux me tromper… ;p)
#!/bin/bash
for src in src/*.mp4 ; do
heure=$(exiftool -DateTimeOriginal ${src} |sed -e 's/^.*: //')
cp ${src} dst/"${heure}.mp4"
done
En fonction du shell, tu peux probablement feinter pour ignorer la casse, mais ceci est portable : find src -type f -iname '*.mp4' (tu peux jouer avec -name versus -iname et/ou regarder la documentation).
Pour ajouter le nom, tu as la variable $src qui peut servir. Tu peux extraire le nom du fichier avec basename (cf. aussi dirname).
Pour la verbosité, cp, mv, etc. ont une option -v. Sinon tu peux faire du echo ou printf toi-même.
commit d325ddcc0835380eca91d6e485ba7c9fbdc1fc6f
Author: Christian Perrier <bubulle@debian.org>
Date: Sun Sep 19 06:56:24 2010 +0000
Add the newly created user to the sudo group if root is disabled
to be inline with introduction of the sudo group in sudo
1.7.2-2. Closes: #597239
r64799
En même temps, quelle idée d'utiliser `commande` au lieu de $(commande) ? :)
C'est probablement une histoire de goût/habitude, mais que ça soit pour la lisibilité ou la facilité d'imbrication, je conseille chaleureusement la deuxième forme.
Pour les histoires de gestion d'espace, si on est parti pour faire une boucle, pourquoi s'amuser à utiliser for qui déclenche un découpage par mot plutôt que de passer par un while qui découpe par ligne ?
Je te propose la structure suivante, qui devrait te permettre de travailler sereinement :
find /un/point/de/départ -type f | while read f; do
echo "Je suis en train de travailler sur $f"
if xxd -l 0x06 "$f" | grep -qs '^00000000: XXXX YYYY ZZZZ'; then
echo "$f correspond au motif recherché"
else
echo "$f ne correspond pas"
fi
done
i.e. tu demandes à find de te dresser la liste de tous les fichiers, et tu fais une boucle dessus, fichier par fichier. Pour chacun, tu peux faire les tests de ton choix.
Il est probable que tes fichiers .sh ne correspondent pas au magic number recherché, mais tu pourrais de toute façon les exclure en ajoutant un filtre sur le nom à l'appel find : ! -name '*.sh'
Alors, j'ai assez bon espoir que la page de manuel dans Ubuntu soit assez similaire à ce que j'ai dans Debian, qui détaille ceci :
/proc/sys/vm/overcommit_memory
This file contains the kernel virtual memory accounting mode. Values are:
0: heuristic overcommit (this is the default)
1: always overcommit, never check
2: always check, never overcommit
In mode 0, calls of mmap(2) with MAP_NORESERVE are not checked, and the default check is very weak, leading to the risk of getting a process "OOM-killed".
In mode 1, the kernel pretends there is always enough memory, until memory actually runs out. One use case for this mode is scientific computing applications that employ large sparse arrays. In Linux kernel versions before 2.6.0, any nonzero value implies mode 1.
In mode 2 (available since Linux 2.6), the total virtual address space that can be allocated (CommitLimit in /proc/meminfo) is calculated as
CommitLimit = (total_RAM - total_huge_TLB) * overcommit_ratio / 100 + total_swap
where:
total_RAM is the total amount of RAM on the system;
total_huge_TLB is the amount of memory set aside for huge pages;
overcommit_ratio is the value in /proc/sys/vm/overcommit_ratio; and
total_swap is the amount of swap space.
For example, on a system with 16GB of physical RAM, 16GB of swap, no space dedicated to huge pages, and an overcommit_ratio of 50, this formula yields a CommitLimit of 24GB.
Since Linux 3.14, if the value in /proc/sys/vm/overcommit_kbytes is nonzero, then CommitLimit is instead calculated as:
CommitLimit = overcommit_kbytes + total_swap
See also the description of /proc/sys/vm/admiin_reserve_kbytes and /proc/sys/vm/user_reserve_kbytes.
Et la description des différents modes me semble bien expliquer ce que tu cherchais à comprendre, non ?
Après comme tu le signales, ça reste un produit défectueux sur toute leur gamme
Qu'on soit bien d'accord, c'est la plupart de leurs produits qui sont désormais équipés de ce composant. Et pas : un seul produit touché parmi tous les autres qui sont épargnés.
Bottom-line (qui n'engage que moi) : leur premier prix est probablement un meilleur choix que n'importe quel autre modèle.
Ce serait sympa de faciliter la vie des gens qui pourraient vouloir te répondre, en utilisant la syntaxe Markdown à disposition, au moins pour le code que tu cites.
Pour celles et ceux qui voudraient avoir le code sous la main, il semblerait que ceci dans coucou.c suffise pour avoir des choses similaires, même si j'ai du puts au lieu de printf :
#include <stdio.h>
int main(void) {
printf("coucou\n");
return 0;
}
Puis gcc -o coucou coucou.c && objdump -S -x coucou | less pour voir plein de choses.
Côté symboles non définis, on notera en particulier :
Si ma réponse est trop loin du code que tu veux inspecter, ce serait bien de citer le code en question plutôt que la sortie de la décompilation de la compilation. ;p
Je t'invite à vérifier ce que ça raconte sur Launchpad ainsi qu'à vérifier la version la plus récente. Si la documentation n'est pas à jour dans la dernière version et s'il n'y a pas déjà de rapport de bogue sur Launchpad, en ouvrir un (si possible avec un correctif) serait chouette. :)
En vrac : ça ne permet pas d'insérer un sort si c'est nécessaire, gérer la syntaxe particulière ({} et ;, ainsi que la position de la partie -exec au sein des paramètres de find) peut être compliqué, c'est plus difficile de garder une trace du nombre d'erreurs, etc.
Et bien évidemment, cf. les avertissements concernant la sécurité de -exec et -execdir dans la page de manuel de find.
Quitte à être tatillon : awk travaille sur des enregistrements plutôt que sur des lignes. Ce raccourci est compréhensible vu la valeur par défaut de RS, mais autant être précis ? ;)
Comme -u est pour --update, on peut se poser la question d'un éventuel --no-update.
Et ça semble être disponible d'après le code :
parser.add_option("-n","--no-update",action="store_false",dest="update",default=True,help=_("Do not update package cache after adding"))parser.add_option("-u","--update",action="store_true",dest="update",default=True,help=_("Update package cache after adding (legacy option)"))
On peut se poser la question d'itérer avec un for sur la sortie de ls (en vrai : à éviter), surtout quand awk peut gérer plusieurs fichiers d'entrée. Exemple en affichant le nom de chacun à chaque fois qu'on est sur la première ligne du fichier courant (« The input record number in the current input file ») :
Si on veut d'une part autoriser autant de fichiers que possible et ne pas être limité par une quelconque limite de taille maximale pour une commande, et d'autre part éviter le cas d'erreur « l'expansion du motif n'a rien donné, donc on travaille sur un fichier dont le nom est exactement /var/www/cgi-bin/LPAR_MAP/* », favoriser find est une bonne idée :
find /var/www/cgi-bin/LPAR_MAP -type f | while read file; do awk 'stuff' "$file"; done
Avec un sort au milieu en option si l'ordre est important. Encore mieux avec -print0 et xargs -0 pour éviter les problèmes avec espaces et caractères spéciaux, mais je vais arrêter ma digression ici.
[^] # Re: bash vs. sh ?
Posté par Cyril Brulebois (site web personnel) . En réponse au message Conky et condition (if). Évalué à 1.
Et c'est encore mieux après un café… C'est la même chose avec
[[ … ]]
:Debian Consultant @ DEBAMAX
# bash vs. sh ?
Posté par Cyril Brulebois (site web personnel) . En réponse au message Conky et condition (if). Évalué à 1.
Il se passe quoi si tu changes
==
en=
? Le premier n'est pas standard, le second si. Si ton shell système n'est pas bash mais par exemple dash, ça peut expliquer que le test renvoie une erreur…Debian Consultant @ DEBAMAX
# Variables Puppet
Posté par Cyril Brulebois (site web personnel) . En réponse au message Puppet - Facts - Besoin d'explication. Évalué à 2.
Cela semble fonctionner mais uniquement sur certaines variables exposées par Puppet. Un
grep
rapide dans la configuration Puppet utilisée pour l'infrastructure Debian (dsa-puppet.git) donne ces couples occurrence/variable :Cela ressemble beaucoup à ce qu'on peut configurer dans
/etc/puppet/puppet.conf
!Dans le cas
ldapserver
, on pourrait se poser la question d'une éventuelle variable « sortie du chapeau », mais c'est également défini dans Puppet. Dans 4.8.2 que j'ai sous la main, c'est via un appeldefine_settings
danslib/puppet/defaults.rb
.(Et si on se pose la question de tricher en ajoutant un
test = youhou
dans la section[agent]
de la configuration Puppet, ça semble être ignoré.)Debian Consultant @ DEBAMAX
[^] # Re: Plus de détails ?
Posté par Cyril Brulebois (site web personnel) . En réponse au message Rsync Problème avec effacement dans l'option --delete. Évalué à 1.
Un problème de droits sur un ou plusieurs fichiers/répertoires ? Ce serait plutôt simple à corriger, plutôt qu'un éventuel de système de fichiers/disques… Les « I/O errors », ça fait toujours un peu peur…
Voir aussi :
Debian Consultant @ DEBAMAX
# Plus de détails ?
Posté par Cyril Brulebois (site web personnel) . En réponse au message Rsync Problème avec effacement dans l'option --delete. Évalué à 1.
Tu as des messages d'erreurs à nous indiquer ?
Je ne vois pas du tout pourquoi
rsync
aurait des problèmes avec des noms de fichiers contenant des espaces. Exemple en local :Au passage : attention aux slashes en fin de nom de répertoire, ils sont significatifs pour
rsync
.Debian Consultant @ DEBAMAX
[^] # Re: pas d'utilisateur root sous Ubuntu
Posté par Cyril Brulebois (site web personnel) . En réponse au message différence entre les permissions windows et linux (accès aux dossiers). Évalué à 2.
Je partirais plutôt sur
chmod o-rx /home/*
ouchmod o-rwx /home/*
.w
pouro
, mais bon la deuxième commande permet d'être absolument certain.x
est absent de chaque répertoire utilisateur.Debian Consultant @ DEBAMAX
[^] # Re: iptables est remplacé par nftables
Posté par Cyril Brulebois (site web personnel) . En réponse à la dépêche Debian 10 Buster : une distribution qui a du chien. Évalué à 6.
Bonne question.
Je note que ça n'est pas supporté par
iptables-translate
(ou sa varianteiptables-restore-translate
), puisque la commande en question est recopiée comme telle en sortie, préfixée par#
.La page de manuel contient :
Dans les sources
iptables
, je note qu'il n'y a pas de fichierextensions/libipt_TTL.txlate
… Ce qui semble confirmer qu'il n'est pas prévu de proposer de traduction automatique de règle pour la cibleTTL
, implémentée dans le noyau par :Et mes recherches semblent suggérer que la gestion TTL n'est prévue que côté matching…
Et ça semble confirmé par : https://wiki.nftables.org/wiki-nftables/index.php/Supported_features_compared_to_xtables
Debian Consultant @ DEBAMAX
[^] # Re: Logs noyau ?
Posté par Cyril Brulebois (site web personnel) . En réponse au message Debian 10 Buster : Problème iptables/nftables avec Docker. Évalué à 1.
Ça ressemble beaucoup à ce que j'évoquais… Il semblerait qu'il n'y ait pas de
nf_nat.ko
etxt_conntrack.ko
chargeable pour ton noyau, du coup paf ?Debian Consultant @ DEBAMAX
# Logs noyau ?
Posté par Cyril Brulebois (site web personnel) . En réponse au message Debian 10 Buster : Problème iptables/nftables avec Docker. Évalué à 1.
Déjà vu des blagues similaires sur une machine où on essayait de configurer un VPN. Au final,
iptables
(c'était il y a quelques années déjà) renvoyait des erreurs similaires sur la gestion des routes et du forwarding, mais le problème fondamental était que lancer ces commandes nécessitait de charger des modules noyau. Or cette machine avait un nouveau noyau, n'avait pas encore redémarré dessus, et le chargement de modules échouait.Bref, je suggère de vérifier
dmesg
et assimilés. Quant au noyau OVH, je ne suis pas sûr de comprendre pourquoi il faut se fader ce genre de choses…Debian Consultant @ DEBAMAX
[^] # Re: LC_ALL, LC_CTYPE
Posté par Cyril Brulebois (site web personnel) . En réponse au message Problème encodage et ls . Évalué à 1.
Je ne vois pas trop le rapport avec
dpkg
. Si tu es sur une distribution (basée sur) Debian, c'est l'installation et la configuration du paquetlocales
qui permettent de jouer sur le contenu des fichiers/etc/environment
et/etc/default/locale
. Sur le même système que précédemment,/etc/environment
est vide et le/etc/default/locale
contient :(Cf.
dpkg-reconfigure locales
pour changer la configuration et le contenu de ce fichier par effet de bord.)Le contenu que tu cites ressemble à une tentative de la personne qui a buildé ton image de faire disparaître toutes les warnings (notamment niveau Perl) concernant des locales non configurées, en positionnant cette variable une seule fois dans ce fichier. Ça devrait probablement ne pas rester dans ce fichier une fois l'image préparée… (Mais je joue aux devinettes, je peux me tromper…
;p
)Debian Consultant @ DEBAMAX
# LC_ALL, LC_CTYPE
Posté par Cyril Brulebois (site web personnel) . En réponse au message Problème encodage et ls . Évalué à 4.
La variable
LC_ALL
prend le pas sur tout le reste…Sur un environnement configuré en anglais britannique et en UTF-8 :
il suffit de positionner
LC_TIME=C
pour reproduire le problème d'affichage parls
.Plus d'infos sur https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html. Extrait :
Ne pas toucher à
LC_TIME
mais positionnerLC_ALL=C
produit le même effet, vu l'override mentionné au début.Debian Consultant @ DEBAMAX
# find est ton ami
Posté par Cyril Brulebois (site web personnel) . En réponse au message Renommage en masse selon métadonnées.. Évalué à 3.
Tu utilises :
En fonction du shell, tu peux probablement feinter pour ignorer la casse, mais ceci est portable :
find src -type f -iname '*.mp4'
(tu peux jouer avec-name
versus-iname
et/ou regarder la documentation).Pour ajouter le nom, tu as la variable
$src
qui peut servir. Tu peux extraire le nom du fichier avecbasename
(cf. aussidirname
).Pour la verbosité,
cp
,mv
, etc. ont une option-v
. Sinon tu peux faire duecho
ouprintf
toi-même.Bonnes évolutions.
Debian Consultant @ DEBAMAX
[^] # Re: Tu as loupé une étape
Posté par Cyril Brulebois (site web personnel) . En réponse au message problème Debian 10 stable. Évalué à 1. Dernière modification le 26 juillet 2019 à 20:56.
Non, si on spécifie un mot de passe root.
Oui, si on ne spécifie pas de mot de passe root.
Ça n'est pas excessivement nouveau :
Debian Consultant @ DEBAMAX
[^] # Re: Lit tes cours / demande à ton prof ?
Posté par Cyril Brulebois (site web personnel) . En réponse au message Script pour vérifier si une chaîne de caractère existe dans le magic number. Évalué à 3. Dernière modification le 25 juillet 2019 à 08:01.
En même temps, quelle idée d'utiliser
`commande`
au lieu de$(commande)
?:)
C'est probablement une histoire de goût/habitude, mais que ça soit pour la lisibilité ou la facilité d'imbrication, je conseille chaleureusement la deuxième forme.
Pour les histoires de gestion d'espace, si on est parti pour faire une boucle, pourquoi s'amuser à utiliser
for
qui déclenche un découpage par mot plutôt que de passer par unwhile
qui découpe par ligne ?Debian Consultant @ DEBAMAX
# Une écriture un peu différente
Posté par Cyril Brulebois (site web personnel) . En réponse au message Script pour vérifier si une chaîne de caractère existe dans le magic number. Évalué à 2. Dernière modification le 24 juillet 2019 à 15:00.
Je te propose la structure suivante, qui devrait te permettre de travailler sereinement :
i.e. tu demandes à
find
de te dresser la liste de tous les fichiers, et tu fais une boucle dessus, fichier par fichier. Pour chacun, tu peux faire les tests de ton choix.Il est probable que tes fichiers
.sh
ne correspondent pas au magic number recherché, mais tu pourrais de toute façon les exclure en ajoutant un filtre sur le nom à l'appelfind
:! -name '*.sh'
Debian Consultant @ DEBAMAX
[^] # Re: /proc/sys/vm/overcommit_memory
Posté par Cyril Brulebois (site web personnel) . En réponse au message pourquoi malloc peut échouer alors que linux utilise de la mémoire virtuelle. Évalué à 3.
Alors, j'ai assez bon espoir que la page de manuel dans Ubuntu soit assez similaire à ce que j'ai dans Debian, qui détaille ceci :
Et la description des différents modes me semble bien expliquer ce que tu cherchais à comprendre, non ?
(Pour la visualiser en ligne : https://manpages.debian.org/buster/manpages/proc.5.en.html)
Debian Consultant @ DEBAMAX
# /proc/sys/vm/overcommit_memory
Posté par Cyril Brulebois (site web personnel) . En réponse au message pourquoi malloc peut échouer alors que linux utilise de la mémoire virtuelle. Évalué à 5.
Regarde le mécanisme d'
overcommit
, par exemple dansman 5 proc
.Debian Consultant @ DEBAMAX
[^] # Re: on sort le fer à souder
Posté par Cyril Brulebois (site web personnel) . En réponse au message Ma souris est buggée. Évalué à 2.
Qu'on soit bien d'accord, c'est la plupart de leurs produits qui sont désormais équipés de ce composant. Et pas : un seul produit touché parmi tous les autres qui sont épargnés.
Bottom-line (qui n'engage que moi) : leur premier prix est probablement un meilleur choix que n'importe quel autre modèle.
Debian Consultant @ DEBAMAX
[^] # Re: on sort le fer à souder
Posté par Cyril Brulebois (site web personnel) . En réponse au message Ma souris est buggée. Évalué à 3.
Omron c'est justement ce qu'il y a dans les Logitech haut de gamme, et c'est justement le composant bien foireux dessus quand il s'agit de 50M.
Quelques pointeurs : Cyril hallucine et Jo hallucine.
Debian Consultant @ DEBAMAX
# Formatage, puts, _start, etc.
Posté par Cyril Brulebois (site web personnel) . En réponse au message aide en assembleur quand je lance objdump -M intel -DTCs ./a.out. Évalué à 1.
Ce serait sympa de faciliter la vie des gens qui pourraient vouloir te répondre, en utilisant la syntaxe Markdown à disposition, au moins pour le code que tu cites.
Pour celles et ceux qui voudraient avoir le code sous la main, il semblerait que ceci dans
coucou.c
suffise pour avoir des choses similaires, même si j'ai duputs
au lieu deprintf
:Puis
gcc -o coucou coucou.c && objdump -S -x coucou | less
pour voir plein de choses.Côté symboles non définis, on notera en particulier :
et dans
main
l'appel avec lecallq 560 <puts@plt>
:Sinon,
_start
est le point d'entrée, comme raconté ici par exemple → Introduction to the ELF Format (Part V) : Understanding C start up .init_array and .fini_array sections.Si ma réponse est trop loin du code que tu veux inspecter, ce serait bien de citer le code en question plutôt que la sortie de la décompilation de la compilation.
;p
Debian Consultant @ DEBAMAX
[^] # Re: Vive la doc à jour
Posté par Cyril Brulebois (site web personnel) . En réponse au message apt-add-repository -u par défaut. Évalué à 2.
Aucun problème.
Je t'invite à vérifier ce que ça raconte sur Launchpad ainsi qu'à vérifier la version la plus récente. Si la documentation n'est pas à jour dans la dernière version et s'il n'y a pas déjà de rapport de bogue sur Launchpad, en ouvrir un (si possible avec un correctif) serait chouette.
:)
Debian Consultant @ DEBAMAX
[^] # Re: difficile ....
Posté par Cyril Brulebois (site web personnel) . En réponse au message Script awk : Afficher le nom du fichier en cours de traitement ?. Évalué à 1.
En vrac : ça ne permet pas d'insérer un
sort
si c'est nécessaire, gérer la syntaxe particulière ({}
et;
, ainsi que la position de la partie-exec
au sein des paramètres defind
) peut être compliqué, c'est plus difficile de garder une trace du nombre d'erreurs, etc.Et bien évidemment, cf. les avertissements concernant la sécurité de
-exec
et-execdir
dans la page de manuel defind
.Debian Consultant @ DEBAMAX
[^] # Re: simplifier la logique
Posté par Cyril Brulebois (site web personnel) . En réponse au message Script awk : Afficher le nom du fichier en cours de traitement ?. Évalué à 3.
Quitte à être tatillon :
awk
travaille sur des enregistrements plutôt que sur des lignes. Ce raccourci est compréhensible vu la valeur par défaut deRS
, mais autant être précis ?;)
Debian Consultant @ DEBAMAX
# Vive la doc à jour
Posté par Cyril Brulebois (site web personnel) . En réponse au message apt-add-repository -u par défaut. Évalué à 3.
Comme
-u
est pour--update
, on peut se poser la question d'un éventuel--no-update
.Et ça semble être disponible d'après le code :
Mon jeu de piste :
dget -ux https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/software-properties/0.96.24.32.10/software-properties_0.96.24.32.10.dsc
grep update add-apt-repository
Debian Consultant @ DEBAMAX
[^] # Re: difficile ....
Posté par Cyril Brulebois (site web personnel) . En réponse au message Script awk : Afficher le nom du fichier en cours de traitement ?. Évalué à 7.
On peut se poser la question d'itérer avec un
for
sur la sortie dels
(en vrai : à éviter), surtout quandawk
peut gérer plusieurs fichiers d'entrée. Exemple en affichant le nom de chacun à chaque fois qu'on est sur la première ligne du fichier courant (« The input record number in the current input file ») :awk 'FNR == 1 {print FILENAME}' /var/www/cgi-bin/LPAR_MAP/*
Si on veut d'une part autoriser autant de fichiers que possible et ne pas être limité par une quelconque limite de taille maximale pour une commande, et d'autre part éviter le cas d'erreur « l'expansion du motif n'a rien donné, donc on travaille sur un fichier dont le nom est exactement
/var/www/cgi-bin/LPAR_MAP/*
», favoriserfind
est une bonne idée :find /var/www/cgi-bin/LPAR_MAP -type f | while read file; do awk 'stuff' "$file"; done
Avec un
sort
au milieu en option si l'ordre est important. Encore mieux avec-print0
etxargs -0
pour éviter les problèmes avec espaces et caractères spéciaux, mais je vais arrêter ma digression ici.Debian Consultant @ DEBAMAX