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

Đang mở
#5,191 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Một pull request liên quan đã được merge.

  • #5192 của @borzaka — đã merge

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
35/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
bash, linux, shell
Lĩnh vực
backend, cli

Hướng nghiên cứu

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.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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

Ngôn ngữ chính
Shell
Star
4.9k
Fork
870
Merge trung bình
18 giờ 44 phút
Pull request đã merge (30 ngày)
148

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của GameServerManagers/LinuxGSM

Tất cả issue của GameServerManagers/LinuxGSM

Issue tương tự

Thêm issue về Shell/Bash

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.