当我希望我的测试脚本有干净的输出时,bash --norc 失败了

当我希望我的测试脚本有干净的输出时,bash --norc 失败了

我希望我的测试脚本可以在没有初始启动脚本的情况下运行。

我发现选项“--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;我还没有测试过。)

相关内容