![当我希望我的测试脚本有干净的输出时,bash --norc 失败了](https://linux22.com/image/1351350/%E5%BD%93%E6%88%91%E5%B8%8C%E6%9C%9B%E6%88%91%E7%9A%84%E6%B5%8B%E8%AF%95%E8%84%9A%E6%9C%AC%E6%9C%89%E5%B9%B2%E5%87%80%E7%9A%84%E8%BE%93%E5%87%BA%E6%97%B6%EF%BC%8Cbash%20--norc%20%E5%A4%B1%E8%B4%A5%E4%BA%86.png)
我希望我的测试脚本可以在没有初始启动脚本的情况下运行。
我发现选项“--norc”不起作用。bash 版本是 4.2.0(2)
我的 ~/.bashrc 包含
echo "in .bashrc"
我想要 bash --norc -x test.sh 输出一个没有 .bashrc 的内容。
$ touch test.sh
$ bash -x test.sh
+ echo 'in .bashrc'
in .bashrc
$ bash --norc -x test.sh
+ echo 'in .bashrc'
in .bashrc
我发现这个问题只发生在我的嵌入式系统上。真正的Linux没有这样的问题。
答案1
正如我在评论中提到的,非交互式 shell.bashrc
根本不应该读取。所以你的问题不应该是“为什么--norc
不工作?”;你的问题应该是“为什么会这样shell 脚本(非交互式 shell).bashrc
首先读取?”。一种可能性是您有一个BASH_ENV
设置为的环境变量~/.bashrc
。如果不是这样,我不知道,但以下是您可能想要尝试的一些方法:
- 如果您的脚本没有执行任何
bash
特定操作,请尝试使用 运行它sh
;即sh -x test.sh
。 - 创建一个
testrc
包含 的文件echo
,然后说bash -–rcfile testrc -x test.sh
。 - 说
bash -–rcfile /dev/null -x test.sh
。 - 以上任何一项均不带
-x
。(这应该没有什么区别,但是这个问题已经没有任何意义了。) - 将脚本作为普通程序运行:
chmod +x test.sh
然后只需test.sh
(或./test.sh
,如果你的搜索路径中没有.
)。(你需要有#!/bin/bash
、#!/bin/sh
、#!/usr/bin/env bash
或与 的第一行等效的内容test.sh
,但无论如何这是一个很好的做法——请参阅grawity 的讨论。)(但这也不应该有什么区别。) - 确实,你应该先这样做,但我不想惹恼你,让你忽略我的其余回答:当然问题就是你说的是什么。检查、再检查、再三检查
test.sh
是否有任何source
或.
命令可能(可能间接地)引入.bashrc
。同样,看看它是否调用了其他可能执行此操作的脚本。验证消息是否in .bashrc
确实来自.bashrc
——尝试重命名.bashrc
(例如,重命名为.bashrc.hold
或任何其他)和/或chmod
将其设置为 0,然后重试。
答案2
--norc
仅适用于交互式 shell;您通过提供参数来启动非交互式 shell test.sh
。尝试添加-i
标志以强制交互式 shell。(注意:这可能会在test.sh
完成后让您进入新 shell;我还没有测试过。)