ใช้กรณีที่ชื่อไฟล์สคริปต์มีหมายเลขนำหน้าเพื่อกำหนดลำดับการดำเนินการ


9

ฉันกำลังมองหาเอกสารหรือกรณีการใช้งานที่ใน Linux มีไดเรกทอรีที่มีเชลล์สคริปต์ที่แต่ละชื่อไฟล์จะถูกนำด้วยตัวเลขและไฟล์จะทำงานในลำดับที่เฉพาะเจาะจง อนุสัญญานี้เรียกว่าอะไรและใช้ที่ไหน

ตัวอย่างเช่น:

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

ฉันรู้ว่าฉันเคยเห็นสิ่งนี้มาก่อนไม่แน่ใจว่ามันถูกเรียกว่าอะไรหรือที่ไหน


1
คุณกำลังคิดถึงสคริปต์ runlevel ที่อยู่ใน/etc/rc?.dไดเรกทอรีหรือไม่?
John Anderson

คำตอบ:


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.

ใช่. มันถูกใช้ในหลาย ๆ ที่ ไฟล์ init 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 อย่างน้อยก็บอกผู้เขียนว่าเขาทำอะไรผิดพลาดดังนั้นในครั้งต่อไปเขาจะทำให้แน่ใจว่าสิ่งเดียวกันจะไม่เกิดขึ้นอีก เพราะมันใช้เวลาและความพยายามในการเขียนคำตอบที่เหมาะสมสำหรับผู้อื่น และ Downvoters เพียงแค่คลิกลูกศรลงนั่นคือทั้งหมด
bsdboy

ฉันไม่ได้ลงคะแนนในคำตอบนี้ แต่คำถามถามหาเอกสาร - "หรือสิ่งนี้เรียกว่าอะไร" ไม่ใช่สคริปต์ที่จะทำ
Joe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.