「run-parts」- 运行目录中的脚本或者程序

命令行语法格式

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

run-parts -V

命令简述

run-parts会运行DIRECTORY目录中所有的可执行文件,但是文件名要符合下面的要求。其他的文件和目录则会被忽略。

如果既没有给出–lsbsysinit选项也没有给出–regex选项,那么这些名称只能由ASCII大小写字母、ASCII数字、ASCII下划线、ASCII减号连字符组成。

如果给出–lsbsysinit选项,则名称不得以.dpkg-old.dpkg-dist.dpkg-new.dpkg-tmp结尾,并且必须属于以下一个或多个名称空间:

  • LANANA分配的命名空间 (^[a-z0-9]+$);
  • LSB分层和保留的命名空间 (^_?([a-z0-9_.]+-)+[a-z0-9]+$);
  • Debian的cron脚本命名空间 (^[a-zA-Z0-9_-]+$);

如果给出–regex选项,则名称必须与该选项指定的正则表达式相匹配。

文件按其名称的词汇排序顺序(根据C/POSIX语言环境字符整理规则)运行。如果给出–reverse选项,则它们按相反的顺序运行。

命令支持的选项及含义

–test
打印会被run-parts运行的脚本的名称,但不会实际的运行这些脚本。

–list
打印所有匹配的文件名,不局限于可执行,没有执行权限的文件也会打印,但不会实际的去执行。
该选项不能与–test一起使用。

-v, –verbose
在运行前将每个脚本名打印到stderr。

–report
类似于–verbose,但只打印会生成输出的脚本的名称。脚本的名称被打印到脚本首先产生输出的STDUT或STDRR中的任何一个,。

–reverse
反转脚本的执行顺序。

–exit-on-error
一旦脚本以非零退出码返回,则退出。

–lsbsysinit
使用LSB命名空间,而不是默认的行为。

–new-session
在分离的进程回话中运行每一个脚本。如果你使用了这个选项,当你结束掉run-parts时并不会结束当前正在运行的脚本,它会一直运行到结束。

–regex=RE
使用正则表达式RE来验证文件名。参见下面的示例部分。

-u, –umask=umask
在运行脚本前将umask值设置为umask。umask的值应该是八进制的。umask的默认值为022。

-a, –arg=argument
指定要传递给脚本的参数。每个参数单独使用一个–arg选项。


表示选项结束,该选项后面所有的参数都会被视为文件名,即使以横线开始。

-h, –help
显示帮助信息然后退出。

-V, –version
打印版本号的信息,然后退出。

使用示例

打印/etc目录下所有名字以p开始且以d结束的文件:

# run-parts –list –regex ‘^p.*d$’ /etc

常见错误列表

#1 run-parts: failed to exec /etc/cron.hourly/mailinfo: Exec format error

# cd / && run-parts –report /etc/cron.hourly
/etc/cron.hourly/mailinfo:
run-parts: failed to exec /etc/cron.hourly/mailinfo: Exec format error
run-parts: /etc/cron.hourly/mailinfo exited with return code 1

描述:当我在使用run-parts执行脚本的时候,产生了如上的错误Exec format error,mailinfo命令是个脚本。
原因:因为SHELL脚本中添加Shebang (Unix),emmmm…,就是SHELL脚本开头的那个#!/bin/bash
解决:在mailfinfo脚本的第一行添加#!/bin/bash,或者#!/bin/sh,根据实际情况而定。

参考文献

  • man 8 run-parts

更新日志

2018/05/18 创建文章