スクリプトのファイル名に先頭の番号があり、実行順序を決定する使用例


9

Linuxで、各ファイル名に数字が付いたシェルスクリプトのディレクトリがあり、ファイルがその特定の順序で実行されるドキュメントまたは使用例を探しています。この規則は何と呼ばれ、どこで使用されますか?

例えば:

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

私はこれを以前に見たことがあることを知っています。


1
/etc/rc?.dディレクトリにあるランレベルスクリプトを考えていますか?
ジョンアンダーソン

回答:


12

あなたが参照しているようです 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.

はい。多くの場所で使用されています。古いSysV initファイル(内/etc/rc.*)、ネットワークマネージャー補助スクリプト、X11スタートアップ、一時停止/再開手順...
Rmano

-1

この方法/ハックがうまくいくかどうかはわかりません。しかし、私はあなたが正しいなら、これはうまくいくと思います。

[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]$

または

$ 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

スクリプトを作成し、それを使用して、任意のフォルダーで順番に(ファイル名に含まれる番号に従って、つまりxxxx-abcdefに従って)スクリプトを実行できます。

間違えたら訂正してください。


@steeldriver、申し訳ありません。ファイル名にスペースが含まれる場合、このコードは正しく機能しません。もう一度申し訳ありませんが、更新します。思い出させてくれてありがとう。
bsdboy 2017

グロブ一致のソート順(有効な場合)は、ロケール照合設定に従っていると確信しています。
David Foerster

@DavidFoerster、ええ、私もそう思います。
bsdboy 2017

StackExchangeサイトの回答に反対票を投じる意思がある人は誰でも、少なくとも作成者に自分の犯した間違いを教えてください。次回から、彼は同じことが再び起こらないようにします。他の人のために適切な答えを書くには多くの時間と労力を要するからです。そして、Downvoterは下向き矢印をクリックするだけです。それだけです。
bsdboy 2017

私はこの回答に投票しませんでしたが、質問はドキュメントを要求します-それを行うためのスクリプトではなく、「またはこれは何と呼ばれますか?」
ジョー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.