命令格式

set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

set命令的主要作用是设置SHELL的属性, 第一组与第二组都是set的选项,+号表示关闭选项,-号表示打开选项,最后一组arg是位置参数。 分别会把arg 赋值给$1,$2...

optionoption-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的参数。
-aallexport标示已修改的变量,以供输出至环境变量。
-bnotify使被中止后台程序立刻 报告 执行状态。
-Bbraceexpand启用brace expansion。默认启用。
-Cnoclobber重定向所产生的文件无法覆盖已存在的文件。‘>’, ‘>&’, ‘<>’
-dShell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
-eerrexit若指令传回值不等于0,则立即退出shell。
-fnoglob取消使用通配符。
-hhashall自动记录函数的所在位置。
-HShell:可利用"!"加的方式来执行history中记录的指令。
-kkeyword指令所给的参数都会被视为此指令的环境变量。
-l记录for循环的变量名称。
-mmonitor启用Job control,使用监视模式。
-nnoexec只读取指令,而不实际执行。通常用于检查脚本语法。
-pprivileged启用 privileged 模式,$BASH_ENV$ENV文件不会被执行,SHELLOPTS, BASHOPTS, CDPATH and GLOBIGNORE 变量被忽略
-Pphysical启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
-t执行完随后的指令,即退出shell。
-unounset当执行时使用到未定义过的变量,则显示错误信息。
-vverbose显示shell所读取的输入值。
-xxtrace执行指令后,会先显示该指令及所下的参数。

示例代码


#!/bin/sh
set -e

# first arg is `-f` or `--some-option`
# or first arg is `something.conf`
if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then
        set -- redis-server "$@"
fi

# allow the container to be started with `--user`
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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐