[Bug]: A failed command exits with 0 when core_exit.sh is downloaded on exit

Open
#5,191 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

A pull request for this has already been merged.

  • #5192 by @borzaka — merged

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Stale
Tech stack
bash, linux, shell
Domain
backend, cli

Research direction

Read core_modules.sh and core_dl.sh, focusing on core_exit.sh(), fn_fetch_module, and fn_fetch_file around the local exitcode declaration. Reproduce with a fresh instance and the reported start command inside tmux, then compare its exit code before and after core_exit.sh is present. Done means the first failing run returns its original nonzero code; linked pull request #5192 is merged.

Written by the indexing model from the issue text.

Description

command: start distro: Debian engine: null game: Teamspeak 3 info: tmux reproducible: always severity: low status: fixed in develop type: bug
Severity

severity: low

Reproducibility

reproducible: always

Regression

regression: no

Affects latest release

latest-release: yes

User story

As a server admin who runs LinuxGSM from scripts or cron, I want a failed command to return a non-zero exit code on a new instance too, so that the failure is not reported as success.

Script name

ts3server (any server is affected)

Game

Teamspeak 3

Linux distro

Debian 13

Command

command: start

Expected behavior

The command exits with the code it set, as it does on later runs (1 for the tmuxception error below).

Actual behavior

If lgsm/modules/core_exit.sh has not been downloaded yet, it is downloaded on exit and the command exits with 0. The same command exits with 1 once the file exists.

Further information

core_exit.sh() in core_modules.sh loads the module with fn_fetch_module, and fn_fetch_file (core_dl.sh) sources it inside its own function. When the file is missing, fn_fetch_file first declares local exitcode="" (line 505), which the curl result and fn_script_log_pass "Downloading ..." set to 0, so core_exit.sh exits with that local instead of the caller's code. Once the file exists the download branch is skipped, so only the exit that downloads core_exit.sh is affected, usually the first failing command on a new instance. The pattern is already in v21.3.2; #4159 only changed local exitcode=$? to local exitcode="". A fix is to download core_exit.sh without running it, keep exitcode, and then load it as before. Related but different exit code fixes: #5060, #5109, #5113.

Pre-checks
  • I ran update and validate before reporting this issue.

Not run: found by code review and reproduced on a new develop instance, which has nothing to update or validate yet.

Relevant log output
# New ts3server instance from develop (11103431), Debian 13 (WSL2), run inside a tmux session.
$ ./ts3server start; echo $?
[ FAIL ] Starting ts3server: tmuxception error: Sorry Cobb you cannot start a tmux session inside of a tmux session.
...
fetching GitHub [ core_exit.sh ] ... OK
0
$ ./ts3server start; echo $?
[ FAIL ] Starting ts3server: tmuxception error: Sorry Cobb you cannot start a tmux session inside of a tmux session.
...
1
Steps to reproduce
  1. Create a new instance: curl -Lo linuxgsm.sh https://raw.githubusercontent.com/GameServerManagers/LinuxGSM/develop/linuxgsm.sh && chmod +x linuxgsm.sh && bash linuxgsm.sh ts3server.
  2. Inside a tmux session, run LGSM_GITHUBBRANCH=develop ./ts3server start; echo $?. It fails with the tmuxception error, fetches core_exit.sh last and prints 0.
  3. Run the same command again. It prints 1.

🤖 Generated with Claude Code

Dominant language
Shell
Stars
4.9k
Forks
870
Avg merge
18h 44m
Merged PRs (30d)
148

Getting set up

Open in Codespaces

Starts the project's dev container in your browser, under your own GitHub account.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from GameServerManagers/LinuxGSM

All issues in GameServerManagers/LinuxGSM

Similar issues

More Shell/Bash issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.