Files
fish-shell/tests/checks/noshebang.fish
Daniel Rainer 64e3b419b6 ci: disable pexpect and tmux tests in sanitizer jobs
These tests are unreliable in CI when running with address sanitiation
enabled, resulting in intermittent CI failures.
Disable them to get rid of the many false positives to reduce annoyance
and to avoid desensitization regarding failures of the asan CI job.

Suggested in
https://github.com/fish-shell/fish-shell/pull/12132#issuecomment-3605639954

Closes #12142
Closes #12132
Closes #12126
2025-12-10 16:15:41 +01:00

98 lines
1.8 KiB
Fish

# RUN: %fish %s
# Test for shebangless scripts - see 7802.
set testdir (mktemp -d)
cd $testdir
touch file
chmod a+x file
function runfile
# Run our file twice, printing status.
# Arguments are passed to exercise the re-execve code paths; they have no other effect.
true # clear status
set -g fish_use_posix_spawn 1
./file arg1 arg2 arg3
echo $status
true # clear status
set -g fish_use_posix_spawn 0
./file arg1 arg2 arg3 arg4 arg5
echo $status
end
# Empty executable files are 'true'.
true >file
sleep 0.1
runfile
#CHECK: 0
#CHECK: 0
# Files without NUL are 'true' as well.
echo -e -n '#COMMENT\n#COMMENT' >file
runfile
#CHECK: 0
#CHECK: 0
# Never implicitly pass files ending with .fish to /bin/sh.
true >file.fish
sleep 0.1
chmod a+x file.fish
set -g fish_use_posix_spawn 0
./file.fish
#CHECKERR: exec: {{.*}}
#CHECKERR: exec: {{.*}}
echo $status
#CHECK: 126
set -g fish_use_posix_spawn 1
./file.fish
#CHECKERR: exec: {{.*}}
#CHECKERR: exec: {{.*}}
echo $status
#CHECK: 126
rm file.fish
# On to NUL bytes.
# The heuristic is that there must be a line containing a lowercase letter before the first NUL byte.
echo -n -e 'true\n\x00' >file
sleep 0.1
runfile
#CHECK: 0
#CHECK: 0
# Doesn't meet our heuristic as there is no newline.
echo -n -e 'true\x00' >file
sleep 0.1
runfile
#CHECK: 126
#CHECKERR: exec: {{.*}}
#CHECKERR: exec: {{.*}}
#CHECK: 126
#CHECKERR: exec: {{.*}}
#CHECKERR: exec: {{.*}}
# Doesn't meet our heuristic as there is no lowercase before newline.
echo -n -e 'NOPE\n\x00' >file
sleep 0.1
runfile
#CHECK: 126
#CHECKERR: exec: {{.*}}
#CHECKERR: exec: {{.*}}
#CHECK: 126
#CHECKERR: exec: {{.*}}
#CHECKERR: exec: {{.*}}
echo 'echo foo' >./-
sleep 0.1
chmod +x ./-
set PATH ./ $PATH
sleep 0.1
-
#CHECK: foo
echo $status
#CHECK: 0