#!/usr/bin/env bash source ./common.sh TODO_NixOS requireGit flake1Dir=$TEST_ROOT/flake1 scriptDir=$TEST_ROOT/nonFlake createGitRepo "$flake1Dir" "" createSimpleGitFlake "$flake1Dir" nix registry add --registry "$registry" flake1 "git+file://$flake1Dir" mkdir -p "$scriptDir" cat > "$scriptDir/shebang.sh" < $scriptDir/shebang-comments.sh < $scriptDir/shebang-different-comments.sh < $scriptDir/shebang-reject.sh < $scriptDir/shebang-inline-expr.sh <> $scriptDir/shebang-inline-expr.sh <<"EOF" #! nix --offline shell #! nix --impure --expr `` #! nix let flake = (builtins.getFlake (toString ../flake1)).packages; #! nix fooScript = flake.${builtins.currentSystem}.fooScript; #! nix /* just a comment !@#$%^&*()__+ # */ #! nix in fooScript #! nix `` #! nix --no-write-lock-file --command bash set -ex foo echo "$@" EOF chmod +x $scriptDir/shebang-inline-expr.sh cat > $scriptDir/fooScript.nix <<"EOF" let flake = (builtins.getFlake (toString ../flake1)).packages; fooScript = flake.${builtins.currentSystem}.fooScript; in fooScript EOF cat > $scriptDir/shebang-file.sh <> $scriptDir/shebang-file.sh <<"EOF" #! nix --offline shell #! nix --impure --file ./fooScript.nix #! nix --no-write-lock-file --command bash set -ex foo echo "$@" EOF chmod +x $scriptDir/shebang-file.sh [[ $($scriptDir/shebang.sh) = "foo" ]] [[ $($scriptDir/shebang.sh "bar") = "foo"$'\n'"bar" ]] [[ $($scriptDir/shebang-comments.sh ) = "foo" ]] [[ "$($scriptDir/shebang-different-comments.sh)" = "$(cat $scriptDir/shebang-different-comments.sh)" ]] [[ $($scriptDir/shebang-inline-expr.sh baz) = "foo"$'\n'"baz" ]] [[ $($scriptDir/shebang-file.sh baz) = "foo"$'\n'"baz" ]] expect 1 $scriptDir/shebang-reject.sh 2>&1 | grepQuiet -F 'error: unsupported unquoted character in nix shebang: *. Use double backticks to escape?'