Cas d'utilisation où les noms de fichiers de script ont des numéros de début pour déterminer l'ordre d'exécution

9

Je cherche de la documentation ou un cas d'utilisation où sous Linux il y a un répertoire avec des scripts shell où chaque nom de fichier est précédé d'un numéro, et les fichiers sont exécutés dans cet ordre particulier. Comment s'appelle cette convention et où est-elle utilisée?

Par exemple:

0001-motd.sh
0002-proxy.sh
0300-ssh.sh

Je sais que j'ai déjà vu ça auparavant, je ne sais pas où ni comment ça s'appelle.

ThomasReggi
la source
1
Pensez-vous aux scripts de niveau d'exécution qui se trouvent dans les /etc/rc?.drépertoires?
John Anderson

Réponses:

12

On dirait que vous faites référence à run-parts

NAME
       run-parts - run scripts or programs in a directory

SYNOPSIS
       run-parts  [--test]  [--verbose] [--report] [--lsbsysinit] [--regex=RE]
       [--umask=umask] [--arg=argument] [--exit-on-error] [--help] [--version]
       [--list] [--reverse] [--] DIRECTORY

       run-parts -V

DESCRIPTION
       run-parts  runs  all  the  executable  files  named  within constraints
       described below, found in directory directory.  Other files and  direc
       tories are silently ignored.

       If neither the --lsbsysinit option nor the --regex option is given then
       the names must consist entirely of ASCII upper- and lower-case letters,
       ASCII digits, ASCII underscores, and ASCII minus-hyphens.

       If  the  --lsbsysinit  option  is given, then the names must not end in
       .dpkg-old  or .dpkg-dist or .dpkg-new or .dpkg-tmp, and must belong  to
       one  or more of the following namespaces: the LANANA-assigned namespace
       (^[a-z0-9]+$);   the   LSB   hierarchical   and   reserved   namespaces
       (^_?([a-z0-9_.]+-)+[a-z0-9]+$);  and  the  Debian cron script namespace
       (^[a-zA-Z0-9_-]+$).

       If the --regex option  is  given,  the  names  must  match  the  custom
       extended regular expression specified as that option's argument.

       Files  are  run  in  the  lexical  sort order (according to the C/POSIX
       locale character collation rules) of their names unless  the  --reverse
       option is given, in which case they are run in the opposite order.
tournevis
la source
Oui. Il est utilisé dans de nombreux endroits. Anciens fichiers SysV init (in /etc/rc.*), scripts auxiliaires de gestionnaire de réseau, X11startups, procédures de suspension-reprise ....
Rmano
-1

Je ne sais pas, cette méthode / hack fonctionnera ou non pour votre cas. Mais je pense que cela fonctionnera si je vous comprends bien.

[feddy@localhost ~]$ mkdir test
[feddy@localhost ~]$ cd test
[feddy@localhost test]$ ls
[feddy@localhost test]$ vi 0001-ko.sh
[feddy@localhost test]$ cp 0001-ko.sh 0002-ko.sh
[feddy@localhost test]$ cp 0001-ko.sh 0004-ko.sh
[feddy@localhost test]$ cp 0001-ko.sh 0005-ko file.sh
[feddy@localhost test]$ cp 0001-ko.sh 0008-ko.sh
[feddy@localhost test]$ ls
0001-ko.sh  0002-ko.sh  0004-ko.sh  0005-ko file.sh  0008-ko.sh

[feddy@localhost test]$ for i in *
> do
> bash "$i"
> done
file 0001-ko.sh
file 0002-ko.sh
file 0004-ko.sh
file 0005-ko file.sh
file 0008-ko.sh
[feddy@localhost test]$

OU

$ find . -iname "*.sh"|while read f; do bash "$f"; done
file ./0001-ko1.sh
file ./0002-ko1.sh
file ./0005-ko1 file.sh
file ./0005-ko1.sh

Vous pouvez créer un script et l'utiliser pour exécuter des scripts dans l'ordre (selon les nombres inclus dans le nom de fichier, par exemple xxxx-abcdef) dans n'importe quel dossier.

Veuillez me corriger si je me trompe.

bsdboy
la source
@steeldriver, oh désolé, si le nom de fichier contient des espaces, alors ce code ne fonctionne pas correctement. Désolé encore pour mon erreur, je vais le mettre à jour. Merci de me le rappeler.
bsdboy
Je suis à peu près sûr que l'ordre de tri des correspondances globales (s'il est activé) suit le paramètre de classement local.
David Foerster
@DavidFoerster, oui je pense aussi.
bsdboy
Quiconque est disposé à voter contre toute réponse sur les sites StackExchange, au moins dire à l'auteur, quelle erreur il a fait, donc à partir de la prochaine fois, il s'assurera que la même chose ne se reproduira pas. Parce qu'il faut beaucoup de temps et d'efforts pour rédiger une réponse appropriée pour les autres. Et, les downvoters ont juste besoin de cliquer sur une flèche vers le bas, c'est tout.
bsdboy
Je n'ai pas voté sur cette réponse, mais la question demande de la documentation - "ou comment ça s'appelle?", Pas un script pour le faire.
Joe