실행 순서를 결정하기 위해 스크립트 파일 이름에 선행 번호가있는 유스 케이스


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 초기화 파일 ( /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

glob의 정렬 순서 (활성화 된 경우)가 로케일 데이터 정렬 설정을 따르는 것이 확실합니다.
David Foerster

@DavidFoerster, 예, 그렇게 생각합니다.
bsdboy

StackExchange 사이트에 대한 답변을 기꺼이 줄이려고하는 사람은 최소한 저자에게 자신이 저지른 실수를 알려주십시오. 따라서 다음 번부터 같은 일이 다시 발생하지 않도록해야합니다. 다른 사람에게 적절한 답변을 작성하려면 많은 시간과 노력이 필요 하기 때문입니다. Downvoter는 아래쪽 화살표를 클릭하기 만하면됩니다.
bsdboy

나는이 답변에 투표하지 않았지만 질문은 문서를 요구한다.
Joe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.