We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Bad documentation or bug: _.rtn does not work
[In the Documentation](https://xon.sh/bash_to_xsh.html) you write that `_.rtn` is the equivalent of the shell `$?` and that it `Returns the exit code, or status, of the previous command.`. Either I understand the documentation wrong or there is a bug:
```
#!/usr/bin/env xonsh
echo "abc"
print(_.rtn)
```
Outputs
```
abc
Traceback (most recent call last):
  File "/home/volker/.local/bin/xonsh", line 8, in <module>
    sys.exit(main())
  File "/home/volker/.local/lib/python3.8/site-packages/xonsh/main.py", line 426, in main
    _failback_to_other_shells(args, err)
  File "/home/volker/.local/lib/python3.8/site-packages/xonsh/main.py", line 373, in _failback_to_other_shells
    raise err
  File "/home/volker/.local/lib/python3.8/site-packages/xonsh/main.py", line 424, in main
    sys.exit(main_xonsh(args))
  File "/home/volker/.local/lib/python3.8/site-packages/xonsh/main.py", line 471, in main_xonsh
    run_script_with_cache(
  File "/home/volker/.local/lib/python3.8/site-packages/xonsh/codecache.py", line 162, in run_script_with_cache
    run_compiled_code(ccode, glb, loc, mode)
  File "/home/volker/.local/lib/python3.8/site-packages/xonsh/codecache.py", line 67, in run_compiled_code
    func(code, glb, loc)
  File "./generateIso.xonsh", line 24, in <module>
    print(_.rtn)
NameError: name '_' is not defined
```

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `xontrib/bashisms.py`
Content:
```
1 """Bash-like interface extensions for xonsh."""
2 import shlex
3 import sys
4 import re
5 import builtins
6 
7 
8 __all__ = ()
9 
10 
11 @events.on_transform_command
12 def bash_preproc(cmd, **kw):
13     bang_previous = {
14         "!": lambda x: x,
15         "$": lambda x: shlex.split(x)[-1],
16         "^": lambda x: shlex.split(x)[0],
17         "*": lambda x: " ".join(shlex.split(x)[1:]),
18     }
19 
20     def replace_bang(m):
21         arg = m.group(1)
22         inputs = __xonsh__.history.inps
23 
24         # Dissect the previous command.
25         if arg in bang_previous:
26             try:
27                 return bang_previous[arg](inputs[-1])
28             except IndexError:
29                 print("xonsh: no history for '!{}'".format(arg))
30                 return ""
31 
32         # Look back in history for a matching command.
33         else:
34             try:
35                 return next((x for x in reversed(inputs) if x.startswith(arg)))
36             except StopIteration:
37                 print("xonsh: no previous commands match '!{}'".format(arg))
38                 return ""
39 
40     return re.sub(r"!([!$^*]|[\w]+)", replace_bang, cmd)
41 
42 
43 def alias(args, stdin=None):
44     ret = 0
45 
46     if args:
47         for arg in args:
48             if "=" in arg:
49                 # shlex.split to remove quotes, e.g. "foo='echo hey'" into
50                 # "foo=echo hey"
51                 name, cmd = shlex.split(arg)[0].split("=", 1)
52                 aliases[name] = shlex.split(cmd)
53             elif arg in aliases:
54                 print("{}={}".format(arg, aliases[arg]))
55             else:
56                 print("alias: {}: not found".format(arg), file=sys.stderr)
57                 ret = 1
58     else:
59         for alias, cmd in aliases.items():
60             print("{}={}".format(alias, cmd))
61 
62     return ret
63 
64 
65 aliases["alias"] = alias
66 builtins.__xonsh__.env["THREAD_SUBPROCS"] = False
67
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/xontrib/bashisms.py b/xontrib/bashisms.py
--- a/xontrib/bashisms.py
+++ b/xontrib/bashisms.py
@@ -64,3 +64,86 @@
 
 aliases["alias"] = alias
 builtins.__xonsh__.env["THREAD_SUBPROCS"] = False
+
+
+def _unset(args):
+    if not args:
+        print("Usage: unset ENV_VARIABLE", file=sys.stderr)
+
+    for v in args:
+        try:
+            __xonsh__.env.pop(v)
+        except KeyError:
+            print(f"{v} not found", file=sys.stderr)
+
+
+aliases["unset"] = _unset
+
+
+def _export(args):
+    if not args:
+        print("Usage: export ENV_VARIABLE=VALUE", file=sys.stderr)
+
+    for eq in args:
+        if "=" in eq:
+            name, val = shlex.split(eq)[0].split("=", 1)
+            __xonsh__.env[name] = val
+        else:
+            print(f"{eq} equal sign not found", file=sys.stderr)
+
+
+aliases["export"] = _export
+
+
+def _set(args):
+    arg = args[0]
+    if arg == "-e":
+        __xonsh__.env["RAISE_SUBPROC_ERROR"] = True
+    elif arg == "+e":
+        __xonsh__.env["RAISE_SUBPROC_ERROR"] = False
+    elif arg == "-x":
+        __xonsh__.env["XONSH_TRACE_SUBPROC"] = True
+    elif arg == "+x":
+        __xonsh__.env["XONSH_TRACE_SUBPROC"] = False
+    else:
+        print(
+            "Not supported in xontrib bashisms.\nPRs are welcome - https://github.com/xonsh/xonsh/blob/master/xontrib/bashisms.py",
+            file=sys.stderr,
+        )
+
+
+aliases["set"] = _set
+
+
+def _shopt(args):
+
+    supported_shopt = ["DOTGLOB"]
+
+    args_len = len(args)
+    if args_len == 0:
+        for so in supported_shopt:
+            onoff = "on" if so in __xonsh__.env and __xonsh__.env[so] else "off"
+            print(f"dotglob\t{onoff}")
+        return
+    elif args_len < 2 or args[0] in ["-h", "--help"]:
+        print(f'Usage: shopt <-s|-u> <{"|".join(supported_shopt).lower()}>')
+        return
+
+    opt = args[0]
+    optname = args[1]
+
+    if opt == "-s" and optname == "dotglob":
+        __xonsh__.env["DOTGLOB"] = True
+    elif opt == "-u" and optname == "dotglob":
+        __xonsh__.env["DOTGLOB"] = False
+    else:
+        print(
+            "Not supported in xontrib bashisms.\nPRs are welcome - https://github.com/xonsh/xonsh/blob/master/xontrib/bashisms.py",
+            file=sys.stderr,
+        )
+
+
+aliases["shopt"] = _shopt
+
+
+aliases["complete"] = "completer list"

{"golden_diff": "diff --git a/xontrib/bashisms.py b/xontrib/bashisms.py\n--- a/xontrib/bashisms.py\n+++ b/xontrib/bashisms.py\n@@ -64,3 +64,86 @@\n \n aliases[\"alias\"] = alias\n builtins.__xonsh__.env[\"THREAD_SUBPROCS\"] = False\n+\n+\n+def _unset(args):\n+    if not args:\n+        print(\"Usage: unset ENV_VARIABLE\", file=sys.stderr)\n+\n+    for v in args:\n+        try:\n+            __xonsh__.env.pop(v)\n+        except KeyError:\n+            print(f\"{v} not found\", file=sys.stderr)\n+\n+\n+aliases[\"unset\"] = _unset\n+\n+\n+def _export(args):\n+    if not args:\n+        print(\"Usage: export ENV_VARIABLE=VALUE\", file=sys.stderr)\n+\n+    for eq in args:\n+        if \"=\" in eq:\n+            name, val = shlex.split(eq)[0].split(\"=\", 1)\n+            __xonsh__.env[name] = val\n+        else:\n+            print(f\"{eq} equal sign not found\", file=sys.stderr)\n+\n+\n+aliases[\"export\"] = _export\n+\n+\n+def _set(args):\n+    arg = args[0]\n+    if arg == \"-e\":\n+        __xonsh__.env[\"RAISE_SUBPROC_ERROR\"] = True\n+    elif arg == \"+e\":\n+        __xonsh__.env[\"RAISE_SUBPROC_ERROR\"] = False\n+    elif arg == \"-x\":\n+        __xonsh__.env[\"XONSH_TRACE_SUBPROC\"] = True\n+    elif arg == \"+x\":\n+        __xonsh__.env[\"XONSH_TRACE_SUBPROC\"] = False\n+    else:\n+        print(\n+            \"Not supported in xontrib bashisms.\\nPRs are welcome - https://github.com/xonsh/xonsh/blob/master/xontrib/bashisms.py\",\n+            file=sys.stderr,\n+        )\n+\n+\n+aliases[\"set\"] = _set\n+\n+\n+def _shopt(args):\n+\n+    supported_shopt = [\"DOTGLOB\"]\n+\n+    args_len = len(args)\n+    if args_len == 0:\n+        for so in supported_shopt:\n+            onoff = \"on\" if so in __xonsh__.env and __xonsh__.env[so] else \"off\"\n+            print(f\"dotglob\\t{onoff}\")\n+        return\n+    elif args_len < 2 or args[0] in [\"-h\", \"--help\"]:\n+        print(f'Usage: shopt <-s|-u> <{\"|\".join(supported_shopt).lower()}>')\n+        return\n+\n+    opt = args[0]\n+    optname = args[1]\n+\n+    if opt == \"-s\" and optname == \"dotglob\":\n+        __xonsh__.env[\"DOTGLOB\"] = True\n+    elif opt == \"-u\" and optname == \"dotglob\":\n+        __xonsh__.env[\"DOTGLOB\"] = False\n+    else:\n+        print(\n+            \"Not supported in xontrib bashisms.\\nPRs are welcome - https://github.com/xonsh/xonsh/blob/master/xontrib/bashisms.py\",\n+            file=sys.stderr,\n+        )\n+\n+\n+aliases[\"shopt\"] = _shopt\n+\n+\n+aliases[\"complete\"] = \"completer list\"\n", "issue": "Bad documentation or bug: _.rtn does not work\n[In the Documentation](https://xon.sh/bash_to_xsh.html) you write that `_.rtn` is the equivalent of the shell `$?` and that it `Returns the exit code, or status, of the previous command.`. Either I understand the documentation wrong or there is a bug:\r\n```\r\n#!/usr/bin/env xonsh\r\necho \"abc\"\r\nprint(_.rtn)\r\n```\r\nOutputs\r\n```\r\nabc\r\nTraceback (most recent call last):\r\n  File \"/home/volker/.local/bin/xonsh\", line 8, in <module>\r\n    sys.exit(main())\r\n  File \"/home/volker/.local/lib/python3.8/site-packages/xonsh/main.py\", line 426, in main\r\n    _failback_to_other_shells(args, err)\r\n  File \"/home/volker/.local/lib/python3.8/site-packages/xonsh/main.py\", line 373, in _failback_to_other_shells\r\n    raise err\r\n  File \"/home/volker/.local/lib/python3.8/site-packages/xonsh/main.py\", line 424, in main\r\n    sys.exit(main_xonsh(args))\r\n  File \"/home/volker/.local/lib/python3.8/site-packages/xonsh/main.py\", line 471, in main_xonsh\r\n    run_script_with_cache(\r\n  File \"/home/volker/.local/lib/python3.8/site-packages/xonsh/codecache.py\", line 162, in run_script_with_cache\r\n    run_compiled_code(ccode, glb, loc, mode)\r\n  File \"/home/volker/.local/lib/python3.8/site-packages/xonsh/codecache.py\", line 67, in run_compiled_code\r\n    func(code, glb, loc)\r\n  File \"./generateIso.xonsh\", line 24, in <module>\r\n    print(_.rtn)\r\nNameError: name '_' is not defined\r\n```\n", "before_files": [{"content": "\"\"\"Bash-like interface extensions for xonsh.\"\"\"\nimport shlex\nimport sys\nimport re\nimport builtins\n\n\n__all__ = ()\n\n\n@events.on_transform_command\ndef bash_preproc(cmd, **kw):\n    bang_previous = {\n        \"!\": lambda x: x,\n        \"$\": lambda x: shlex.split(x)[-1],\n        \"^\": lambda x: shlex.split(x)[0],\n        \"*\": lambda x: \" \".join(shlex.split(x)[1:]),\n    }\n\n    def replace_bang(m):\n        arg = m.group(1)\n        inputs = __xonsh__.history.inps\n\n        # Dissect the previous command.\n        if arg in bang_previous:\n            try:\n                return bang_previous[arg](inputs[-1])\n            except IndexError:\n                print(\"xonsh: no history for '!{}'\".format(arg))\n                return \"\"\n\n        # Look back in history for a matching command.\n        else:\n            try:\n                return next((x for x in reversed(inputs) if x.startswith(arg)))\n            except StopIteration:\n                print(\"xonsh: no previous commands match '!{}'\".format(arg))\n                return \"\"\n\n    return re.sub(r\"!([!$^*]|[\\w]+)\", replace_bang, cmd)\n\n\ndef alias(args, stdin=None):\n    ret = 0\n\n    if args:\n        for arg in args:\n            if \"=\" in arg:\n                # shlex.split to remove quotes, e.g. \"foo='echo hey'\" into\n                # \"foo=echo hey\"\n                name, cmd = shlex.split(arg)[0].split(\"=\", 1)\n                aliases[name] = shlex.split(cmd)\n            elif arg in aliases:\n                print(\"{}={}\".format(arg, aliases[arg]))\n            else:\n                print(\"alias: {}: not found\".format(arg), file=sys.stderr)\n                ret = 1\n    else:\n        for alias, cmd in aliases.items():\n            print(\"{}={}\".format(alias, cmd))\n\n    return ret\n\n\naliases[\"alias\"] = alias\nbuiltins.__xonsh__.env[\"THREAD_SUBPROCS\"] = False\n", "path": "xontrib/bashisms.py"}], "after_files": [{"content": "\"\"\"Bash-like interface extensions for xonsh.\"\"\"\nimport shlex\nimport sys\nimport re\nimport builtins\n\n\n__all__ = ()\n\n\n@events.on_transform_command\ndef bash_preproc(cmd, **kw):\n    bang_previous = {\n        \"!\": lambda x: x,\n        \"$\": lambda x: shlex.split(x)[-1],\n        \"^\": lambda x: shlex.split(x)[0],\n        \"*\": lambda x: \" \".join(shlex.split(x)[1:]),\n    }\n\n    def replace_bang(m):\n        arg = m.group(1)\n        inputs = __xonsh__.history.inps\n\n        # Dissect the previous command.\n        if arg in bang_previous:\n            try:\n                return bang_previous[arg](inputs[-1])\n            except IndexError:\n                print(\"xonsh: no history for '!{}'\".format(arg))\n                return \"\"\n\n        # Look back in history for a matching command.\n        else:\n            try:\n                return next((x for x in reversed(inputs) if x.startswith(arg)))\n            except StopIteration:\n                print(\"xonsh: no previous commands match '!{}'\".format(arg))\n                return \"\"\n\n    return re.sub(r\"!([!$^*]|[\\w]+)\", replace_bang, cmd)\n\n\ndef alias(args, stdin=None):\n    ret = 0\n\n    if args:\n        for arg in args:\n            if \"=\" in arg:\n                # shlex.split to remove quotes, e.g. \"foo='echo hey'\" into\n                # \"foo=echo hey\"\n                name, cmd = shlex.split(arg)[0].split(\"=\", 1)\n                aliases[name] = shlex.split(cmd)\n            elif arg in aliases:\n                print(\"{}={}\".format(arg, aliases[arg]))\n            else:\n                print(\"alias: {}: not found\".format(arg), file=sys.stderr)\n                ret = 1\n    else:\n        for alias, cmd in aliases.items():\n            print(\"{}={}\".format(alias, cmd))\n\n    return ret\n\n\naliases[\"alias\"] = alias\nbuiltins.__xonsh__.env[\"THREAD_SUBPROCS\"] = False\n\n\ndef _unset(args):\n    if not args:\n        print(\"Usage: unset ENV_VARIABLE\", file=sys.stderr)\n\n    for v in args:\n        try:\n            __xonsh__.env.pop(v)\n        except KeyError:\n            print(f\"{v} not found\", file=sys.stderr)\n\n\naliases[\"unset\"] = _unset\n\n\ndef _export(args):\n    if not args:\n        print(\"Usage: export ENV_VARIABLE=VALUE\", file=sys.stderr)\n\n    for eq in args:\n        if \"=\" in eq:\n            name, val = shlex.split(eq)[0].split(\"=\", 1)\n            __xonsh__.env[name] = val\n        else:\n            print(f\"{eq} equal sign not found\", file=sys.stderr)\n\n\naliases[\"export\"] = _export\n\n\ndef _set(args):\n    arg = args[0]\n    if arg == \"-e\":\n        __xonsh__.env[\"RAISE_SUBPROC_ERROR\"] = True\n    elif arg == \"+e\":\n        __xonsh__.env[\"RAISE_SUBPROC_ERROR\"] = False\n    elif arg == \"-x\":\n        __xonsh__.env[\"XONSH_TRACE_SUBPROC\"] = True\n    elif arg == \"+x\":\n        __xonsh__.env[\"XONSH_TRACE_SUBPROC\"] = False\n    else:\n        print(\n            \"Not supported in xontrib bashisms.\\nPRs are welcome - https://github.com/xonsh/xonsh/blob/master/xontrib/bashisms.py\",\n            file=sys.stderr,\n        )\n\n\naliases[\"set\"] = _set\n\n\ndef _shopt(args):\n\n    supported_shopt = [\"DOTGLOB\"]\n\n    args_len = len(args)\n    if args_len == 0:\n        for so in supported_shopt:\n            onoff = \"on\" if so in __xonsh__.env and __xonsh__.env[so] else \"off\"\n            print(f\"dotglob\\t{onoff}\")\n        return\n    elif args_len < 2 or args[0] in [\"-h\", \"--help\"]:\n        print(f'Usage: shopt <-s|-u> <{\"|\".join(supported_shopt).lower()}>')\n        return\n\n    opt = args[0]\n    optname = args[1]\n\n    if opt == \"-s\" and optname == \"dotglob\":\n        __xonsh__.env[\"DOTGLOB\"] = True\n    elif opt == \"-u\" and optname == \"dotglob\":\n        __xonsh__.env[\"DOTGLOB\"] = False\n    else:\n        print(\n            \"Not supported in xontrib bashisms.\\nPRs are welcome - https://github.com/xonsh/xonsh/blob/master/xontrib/bashisms.py\",\n            file=sys.stderr,\n        )\n\n\naliases[\"shopt\"] = _shopt\n\n\naliases[\"complete\"] = \"completer list\"\n", "path": "xontrib/bashisms.py"}]}