diff --git a/tests/test_integrations.py b/tests/test_integrations.py index a8e37a4bd..2fc87fd8b 100644 --- a/tests/test_integrations.py +++ b/tests/test_integrations.py @@ -1358,6 +1358,7 @@ def test_rc_no_xonshrc_for_non_interactive(tmpdir): (rc_dir / "rc_dir.xsh").write_text("echo RC_DIR", encoding="utf8") (user_home_dir / ".xonshrc").write_text("echo RC_HOME", encoding="utf8") + (script := user_home_dir / "script.xsh").write_text("echo SCRIPT", encoding="utf8") user_home_rc_path_crossplatform = str( (Path(user_home_dir) / ".xonshrc").expanduser() ) @@ -1375,6 +1376,25 @@ def test_rc_no_xonshrc_for_non_interactive(tmpdir): ] cmd = "print(42+42)" add_env = {"HOME": str(user_home_dir)} + + # xonsh + out, err, ret = run_xonsh( + cmd=None, + stdin=None, + single_command=False, + interactive=True, + args=args, + add_env=add_env, + ) + + exp = ".*RC_NOT_HOME.*RC_HOME.*RC_DIR.*" + assert re.match( + exp, + out, + re.MULTILINE | re.DOTALL, + ), f"Expected: {exp!r},\nResult: {out!r},\nargs={args!r}" + + # xonsh -c "cmd" out, err, ret = run_xonsh(cmd=cmd, interactive=False, args=args, add_env=add_env) exp = ".*RC_NOT_HOME.*RC_DIR.*84.*" assert re.match( @@ -1383,6 +1403,7 @@ def test_rc_no_xonshrc_for_non_interactive(tmpdir): re.MULTILINE | re.DOTALL, ), f"Expected: {exp!r},\nResult: {out!r},\nargs={args!r}" + # xonsh -i -c "cmd" out, err, ret = run_xonsh( cmd=cmd + "\n", interactive=True, args=args, add_env=add_env ) @@ -1397,3 +1418,33 @@ def test_rc_no_xonshrc_for_non_interactive(tmpdir): out, re.MULTILINE | re.DOTALL, ), f"Expected: {exp!r},\nResult: {out!r},\nargs={args!r}" + + # xonsh script.xsh + out, err, ret = run_xonsh( + cmd=cmd + "\n", + interactive=False, + single_command=False, + args=args + ["--", script], + add_env=add_env, + ) + exp = ".*RC_NOT_HOME.*RC_DIR.*SCRIPT.*" + assert re.match( + exp, + out, + re.MULTILINE | re.DOTALL, + ), f"Expected: {exp!r},\nResult: {out!r},\nargs={args!r}" + + # xonsh -i script.xsh + out, err, ret = run_xonsh( + cmd=None, + interactive=False, + single_command=False, + args=args + ["-i", "--", script], + add_env=add_env, + ) + exp = ".*RC_NOT_HOME.*RC_HOME.*RC_DIR.*SCRIPT.*" + assert re.match( + exp, + out, + re.MULTILINE | re.DOTALL, + ), f"Expected: {exp!r},\nResult: {out!r},\nargs={args!r}" diff --git a/xonsh/main.py b/xonsh/main.py index 478ff944a..1c917cc1f 100644 --- a/xonsh/main.py +++ b/xonsh/main.py @@ -309,7 +309,7 @@ def _get_rc_files(shell_kwargs: dict, args, env): rc = env.get("XONSHRC") rcd = env.get("XONSHRC_DIR") - if not env.get("XONSH_INTERACTIVE", False): + if not env.get("XONSH_INTERACTIVE", False) or not args.force_interactive: """ Home based ``~/.xonshrc`` file has special meaning and history. The ecosystem around shells treats this kind of files as the place where interactive tools can add configs. To avoid unintended and unexpected affection