bash对于"-"开头目录的处理

我们知道bash shell中的命令是采用"-" 活 “--”开头的。

今天有个同时问自己有个目录是-1,问如何进入。

记得老早前看过,回忆了几分钟,突然想起来了,

要现把参数给设置过就行了,这样这个目录就不会当作参数了。

举例:

madding@wmmad:~$ mkdir -- -1 madding@wmmad:~$ cd -- -1 madding@wmmad:~/-1$ cd .. madding@wmmad:~$ rm -rf -- -

特此记录下,免得下次回忆:)

<think>好的,我现在需要解决用户关于bash脚本中参数-b、-u、-p的具体作用和用法的问题。首先,我需要回忆一下自己对bash参数的理解,或者查找相关资料确认这些参数的具体用途。 根据用户提供的引用,特别是引用[3],里面提到了‘-b -u -p’这些参数,但可能没有详细说明每个参数的作用。因此,我需要进一步查阅bash的文档或者可靠的资源来确认这些参数的功能。 首先,考虑使用`man bash`命令查看手册页。在bash的手册中,参数通常是在调用bash时使用的选项。例如,常见的参数如`-c`用于执行命令字符串,`-i`使bash以交互模式运行等。但用户提到的-b、-u、-p可能属于不同的类别。 接下来,逐一分析每个参数: 1. **-b参数**:在bash的手册中,-b选项可能是指“brace expansion”的控制。例如,`set -o braceexpand`可以启用大括号扩展,而`set +o braceexpand`则禁用。不过,是否在调用bash时使用-b作为参数呢?需要确认。另一种可能是,-b用于指示某些特定的行为,比如后台作业通知,但可能记混了,需要查证。 2. **-u参数**:这通常与“nounset”选项相关,当设置`set -u`或`set -o nounset`时,如果尝试使用未定义的变量,会报错并终止脚本执行。但作为bash启动参数,是否有不同的作用?例如,可能是在调用bash时启用nounset选项,类似`bash -u script.sh`,但需要验证是否正确。 3. **-p参数**:这个可能是指“privileged”模式,即`bash -p`,此时shell不会读取用户的环境文件(如~/.bash_profile),而是保持特权模式,常用于提升安全性,避免用户级配置的影响。例如,某些setuid程序可能会使用这个选项。 现在需要确认这些参数是否确实作为bash的启动选项存在,并且其具体作用。查阅bash的man页面: - `-b`:在“Shell Builtin Commands”部分提到,`set -b`会立即报告后台作业的终止状态,而不是等待下一个提示符。但作为bash的启动参数,可能不直接对应。可能用户提到的-b是脚本中的其他用途,或者可能混淆了不同的上下文。 - `-u`:在“调用Bash”部分,`-u`选项等同于`set -o nounset`,即在执行时遇到未绑定的变量会视为错误。 - `-p`:`-p`选项启动bash时不处理用户的初始化文件(如~/.bashrc),并且以有效用户ID和组ID保持不变的模式运行,即不重置为真实用户ID,这通常用于特权脚本。 此外,可能用户提到的参数是在脚本内部的选项处理,比如通过getopts处理的选项,而非bash本身的参数。例如,某个脚本可能接受-b、-u、-p作为自己的参数,这时候这些参数的具体含义由脚本定义,而非bash本身。但根据引用[3]中的上下文,可能指的是在脚本开头调用bash时的参数,比如shebang中的选项,如`#!/bin/bash -u`,这样在运行脚本时自动启用nounset选项。 总结: - **-u**:启用nounset选项,使未定义的变量引用视为错误。 - **-p**:以特权模式运行,不读取用户配置文件,保持特权环境。 - **-b**:可能与后台作业报告有关,或者在特定上下文中作为其他用途,需要进一步确认。 可能用户提到的参数是在调用bash时使用的选项,或者是在shebang行中指定的选项。例如,在脚本开头使用`#!/bin/bash -u`,这样脚本执行时会启用nounset选项,增强脚本的严谨性。 另外,需要区分bash本身的参数和脚本参数。例如,当执行`bash -u script.sh`时,-u是bash的参数,而script.sh的参数会在脚本内部处理。但如果用户在脚本中使用set命令,如`set -u`,则是在脚本内部启用nounset选项。 可能用户混淆了bash参数和脚本参数,或者set命令的选项。因此,需要明确回答这些参数在bash调用时的作用,以及在脚本中的使用方式。 最后,根据以上分析,整理出每个参数的作用和示例用法,确保引用正确的来源,如bash手册或相关文档,并引用用户提供的参考文献中的相关内容,如引用[3]提到这些参数的组合使用,可能需要结合上下文解释。</think>### Bash 参数 `-b`、`-u`、`-p` 的具体作用及用法 #### 1. **`-b` 参数** **作用**: `-b` 参数与 **后台作业控制** 相关。当 Bash 以 `-b` 参数启动时,会立即报告后台作业的终止状态,而不是等待下一个交互提示符才显示[^4]。 **用法示例**: ```bash bash -b script.sh ``` 此模式下,脚本中的后台任务(如 `sleep 5 &`)结束后会立即输出提示信息,而非等待脚本执行完毕。 --- #### 2. **`-u` 参数** **作用**: `-u` 参数启用 **严格变量检查**(等同于 `set -o nounset`)。若脚本中引用了未定义的变量,Bash 会立即报错并终止执行[^3]。 **用法示例**: - **在脚本中启用**: 在脚本开头添加 `set -u` 或 `set -o nounset`。 - **调用 Bash 时启用**: ```bash bash -u script.sh ``` 或通过 Shebang 行指定: ```bash #!/bin/bash -u ``` **错误示例**: ```bash #!/bin/bash -u echo $UNDEFINED_VAR # 报错:UNDEFINED_VAR: unbound variable ``` --- #### 3. **`-p` 参数** **作用**: `-p` 参数以 **特权模式** 启动 Bash。此时: -读取用户配置文件(如 `~/.bashrc` 或 `~/.bash_profile`)。 - 保留环境变量中的 `$SHELLOPTS` 和 `$BASHOPTS`。 - 有效用户 ID(EUID)和组 ID 保持不变(不重置为真实用户 ID),常用于提升安全性。 **用法示例**: ```bash bash -p script.sh # 以特权模式运行脚本 ``` **典型场景**: 用于需要高安全性的脚本(如涉及权限管理的操作),避免用户级配置干扰。 --- ### 参数组合使用示例 ```bash #!/bin/bash -up # 同时启用 -u 和 -p set -b # 启用后台作业状态即时报告 # 脚本内容... ``` --- ### 注意事项 1. **Shebang 行限制**: 在 Shebang 行中只能指定一个参数(如 `#!/bin/bash -u`),若需多个参数需通过脚本内 `set` 命令或调用时显式传递。 2. **特权模式安全性**: `-p` 参数可能导致脚本绕过用户环境配置,需谨慎使用以避免安全隐患。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值