fish-shell/tests/checks/noshebang.fish
David Adam a52305e11c postfork: further updates to error messages
Only show the shebang warning for .fish commands.

Use the phrase "interpreter directive" as the formal name for the
shebang.

Switch from windows to Windows for the operating system.
2021-12-29 22:33:24 +08:00

95 lines
1.7 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
echo $status
set -g fish_use_posix_spawn 1
./file.fish
echo $status
rm file.fish
#CHECK: 126
#CHECKERR: exec: {{.*}}{{.*}}
#CHECKERR: exec: {{.*}}
#CHECK: 126
#CHECKERR: exec: {{.*}}
#CHECKERR: exec: {{.*}}
# 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: {{.*}}
#CHECK: 126
#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: {{.*}}
#CHECK: 126
#CHECKERR: exec: {{.*}}
echo 'echo foo' >./-
sleep 0.1
chmod +x ./-
set PATH ./ $PATH
sleep 0.1
-
#CHECK: foo
echo $status
#CHECK: 0