命令格式
set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
set 命令的主要作用是设置SHELL的属性, 第一组与第二组都是set的选项,+ 号表示关闭选项,- 号表示打开选项,最后一组arg 是位置参数。 分别会把arg 赋值给$1 ,$2 ,...
option | option-name | 说明 |
---|
-- | | signifies the end of an option list. This option is primarily useful when values listed after the options start with a dash themselves.大概意思是,不让后面的带- 的arg理解为set的参数。 | -a | allexport | 标示已修改的变量,以供输出至环境变量。 | -b | notify | 使被中止的后台程序立刻 报告 执行状态。 | -B | braceexpand | 启用brace expansion 。默认启用。 | -C | noclobber | 重定向所产生的文件无法覆盖已存在的文件。‘>’, ‘>&’, ‘<>’ | -d | | Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。 | -e | errexit | 若指令传回值不等于0,则立即退出shell。 | -f | noglob | 取消使用通配符。 | -h | hashall | 自动记录函数的所在位置。 | -H | | Shell:可利用"!"加的方式来执行history中记录的指令。 | -k | keyword | 指令所给的参数都会被视为此指令的环境变量。 | -l | | 记录for循环的变量名称。 | -m | monitor | 启用Job control,使用监视模式。 | -n | noexec | 只读取指令,而不实际执行。通常用于检查脚本语法。 | -p | privileged | 启用 privileged 模式,$BASH_ENV 和 $ENV 文件不会被执行,SHELLOPTS , BASHOPTS , CDPATH and GLOBIGNORE 变量被忽略 | -P | physical | 启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。 | -t | | 执行完随后的指令,即退出shell。 | -u | nounset | 当执行时使用到未定义过的变量,则显示错误信息。 | -v | verbose | 显示shell所读取的输入值。 | -x | xtrace | 执行指令后,会先显示该指令及所下的参数。 |
示例代码
set -e
if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then
set -- redis-server "$@"
fi
if [ "$1" = 'redis-server' -a "$(id -u)" = '0' ]; then
find . \! -user redis -exec chown redis '{}' +
exec su-exec redis "$0" "$@"
fi
exec "$@"
参考
https://www.computerhope.com/unix/uset.htm
https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
|