diff --git a/ci/gh_actions.py b/ci/gh_actions.py
index bbeb3b34492d05fbb4c4ec9374b1751d112bbbbc..b99096f588e5d3662877024fd96918df800e98f1 100755
--- a/ci/gh_actions.py
+++ b/ci/gh_actions.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/bin/env python3
 # SPDX-License-Identifier: GPL-3.0-or-later
 import json
 import time
diff --git a/ci/respdiff/run-respdiff-tests.sh b/ci/respdiff/run-respdiff-tests.sh
index 2bfc44d99a126e714cd58bee909af86a96d4e9bb..6f0650381c88e97abf432739990ddbe63f634ba4 100755
--- a/ci/respdiff/run-respdiff-tests.sh
+++ b/ci/respdiff/run-respdiff-tests.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 # $1 == udp/tcp/tls, it selects configuration file to use
diff --git a/daemon/lua/kres-gen.sh b/daemon/lua/kres-gen.sh
index d335c0ec3016b664ebd2b2486376876aab93e616..d14c028621345b42c6e55beb9d57e20b221e7550 100755
--- a/daemon/lua/kres-gen.sh
+++ b/daemon/lua/kres-gen.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 # Run with "ninja kres-gen" to re-generate $1
diff --git a/modules/ta_update/ta_update.test.integr/rfc5011/dns2rpl.py b/modules/ta_update/ta_update.test.integr/rfc5011/dns2rpl.py
index 317d671939b46fde80519dd8b4a536252bdbed78..6002e830a99793432bebbb705edf6b41439ccc33 100755
--- a/modules/ta_update/ta_update.test.integr/rfc5011/dns2rpl.py
+++ b/modules/ta_update/ta_update.test.integr/rfc5011/dns2rpl.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/bin/env python3
 """
 Generate RFC 5011 test simulating successful KSK roll-over in 2017.
 
diff --git a/modules/ta_update/ta_update.test.integr/rfc5011/genkeyszones.sh b/modules/ta_update/ta_update.test.integr/rfc5011/genkeyszones.sh
index 4a654695b270a441abeca2a66f13c574103b888c..5ff1d8f146dd4baef71c546bb04f18f08511b8b3 100755
--- a/modules/ta_update/ta_update.test.integr/rfc5011/genkeyszones.sh
+++ b/modules/ta_update/ta_update.test.integr/rfc5011/genkeyszones.sh
@@ -1,4 +1,4 @@
-#!/usr/bin/bash
+#!/usr/bin/env bash
 
 # First, generate DNSSEC keys with timers set to simulate 2017 KSK roll-over.
 # Second, fake system time to pretend that we are at the beginning on time slots
diff --git a/poe b/poe
index b1fafd95d98cdb684c5a1260dbd4ef05d3f67085..17926194effa5b96f015b54d489caa1813427762 100755
--- a/poe
+++ b/poe
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 script_dir="$(dirname "$(readlink -f "$0")")"
 
diff --git a/scripts/bench.sh b/scripts/bench.sh
index 232c52317b9961704185ecf878b3f77460801eb6..d5a9f38e78b6a3954a3cb9825e13379537991858 100755
--- a/scripts/bench.sh
+++ b/scripts/bench.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 set -o errexit -o nounset
 
diff --git a/scripts/bugreport-journals.py b/scripts/bugreport-journals.py
index d66ddfba4dc637f3af116f231475b762eb29be6e..bb4d9f24c5280b2f53a90f4e77e465c8cdb30927 100755
--- a/scripts/bugreport-journals.py
+++ b/scripts/bugreport-journals.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/bin/env python3
 """
 Collect systemd-journal log entries around time of daemon exit and coredumps.
 """
diff --git a/scripts/build-in-obs.sh b/scripts/build-in-obs.sh
index 3256ddee8e4ca61ae0e66048891d4de1212904b0..176b9ad4ddb059c6081d1f7c88c2617190d9ec8d 100755
--- a/scripts/build-in-obs.sh
+++ b/scripts/build-in-obs.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 #
 # Push packaging files to OBS
diff --git a/scripts/coverage_c_combine.sh b/scripts/coverage_c_combine.sh
index a891ded54302b149a2bdf573c0f282a2a1ea7640..46181119e28c07248b5d24efe68a4a456c5eaa47 100755
--- a/scripts/coverage_c_combine.sh
+++ b/scripts/coverage_c_combine.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 # $1 = top source directory
diff --git a/scripts/coverage_env.sh b/scripts/coverage_env.sh
index 0f6810f7e3e507a7ad18dfa0966b57573d87ea12..4f55d857c5ae10fd5a064f4d8b11683e85fb2ddf 100755
--- a/scripts/coverage_env.sh
+++ b/scripts/coverage_env.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 # generate variables for coverage testing
diff --git a/scripts/create_setup.py b/scripts/create_setup.py
index 087ce3b039b62360ab560380cdab04331282207b..2240cea8f662f3e60140bc41bb5135ff7ed6a317 100755
--- a/scripts/create_setup.py
+++ b/scripts/create_setup.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 #
 # Original source:
diff --git a/scripts/enable-repo-cznic-labs.sh b/scripts/enable-repo-cznic-labs.sh
index cbc64c6856236bc90ae44ab0c74164df078f14ad..e7c53a82088c66768053b010d184eadc8bf46a11 100755
--- a/scripts/enable-repo-cznic-labs.sh
+++ b/scripts/enable-repo-cznic-labs.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # enable CZ.NIC Labs Debian/Ubuntu repos - see https://pkg.labs.nic.cz/doc/
 set -e
 
diff --git a/scripts/gen-cdefs.sh b/scripts/gen-cdefs.sh
index d56ab86d04901a6b0f0ec2aa10796fd4a7b5e146..968f40b94ac77b7889731a62d08bd06e01d54177 100755
--- a/scripts/gen-cdefs.sh
+++ b/scripts/gen-cdefs.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 set -o pipefail -o errexit
 
diff --git a/scripts/gen-pgp-keyblock.sh b/scripts/gen-pgp-keyblock.sh
index 29855312420c3b010b0821b06258e3e3d81b2584..bfdb23495e5a1625564aad3490456fe90c1cb216 100755
--- a/scripts/gen-pgp-keyblock.sh
+++ b/scripts/gen-pgp-keyblock.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # Script to create/update Knot Resolver PGP keyring
 set -o errexit -o nounset
 
diff --git a/scripts/get-date.sh b/scripts/get-date.sh
index 365315586b1a063479dcc77c9fef47d9194d0866..fed100484947ffe4bfc5d093a32cec77518d274e 100755
--- a/scripts/get-date.sh
+++ b/scripts/get-date.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 set -o nounset
 cd "$(dirname $0)/.."
diff --git a/scripts/luacov_gen_empty.sh b/scripts/luacov_gen_empty.sh
index 127734df4889e9ac59a7becb920039337263f80e..a953d914e80167d2a8707bb246706cfb830d4121 100755
--- a/scripts/luacov_gen_empty.sh
+++ b/scripts/luacov_gen_empty.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 # Generate stats file in luacov format indicating that files named on stdin
 # were not processed.
diff --git a/scripts/make-archive.sh b/scripts/make-archive.sh
index 9f2be0ea7001941b0267f0a4c9936e4c229eb262..b4cd3367080c8cbc44035b5a590f0b627a74fba5 100755
--- a/scripts/make-archive.sh
+++ b/scripts/make-archive.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 # Create a development tarball
 set -o errexit -o nounset -o xtrace
diff --git a/scripts/make-doc.sh b/scripts/make-doc.sh
index 1723ada764eeacb64437368c1d087c70a456e7bd..503d7943ff6764facd4abe89d571b07d7479942c 100755
--- a/scripts/make-doc.sh
+++ b/scripts/make-doc.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 set -o errexit -o nounset
 cd "$(dirname "${0}")/.."
diff --git a/scripts/make-obs.sh b/scripts/make-obs.sh
index abe967016f499d8fe1be3c142b3638efb5c2e772..cc0aab73a47e5d66e33b93e11964186c68356ddf 100755
--- a/scripts/make-obs.sh
+++ b/scripts/make-obs.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 #
 # create OpenSUSE Build System (OBS) source package
diff --git a/scripts/make-package.sh b/scripts/make-package.sh
index 85549e65f8165e53d5baa426288d308ff107ab46..8b0ba95cde3c65290d7026e80515561f37a04180 100755
--- a/scripts/make-package.sh
+++ b/scripts/make-package.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 set -o errexit
 set -o nounset
diff --git a/scripts/poe-tasks/check b/scripts/poe-tasks/check
index 08ce18a89082933d19c15d34d25e1f3cfc82beaa..5563a9de73b18ab4c5cb343548ce7bf475b72fdd 100755
--- a/scripts/poe-tasks/check
+++ b/scripts/poe-tasks/check
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # ensure consistent behaviour
 src_dir="$(dirname "$(realpath "$0")")"
diff --git a/scripts/poe-tasks/configure b/scripts/poe-tasks/configure
index 452b1a3bc2b1a04bd8a231ec1a8497de37b7df16..1ca961a702ad7096e7b98baeef2b5446aa5d834b 100755
--- a/scripts/poe-tasks/configure
+++ b/scripts/poe-tasks/configure
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # ensure consistent behaviour
 src_dir="$(dirname "$(realpath "$0")")"
diff --git a/scripts/poe-tasks/docs b/scripts/poe-tasks/docs
index d15c074eb21acd17e2664247de5c1aeb8a65f664..6a62eb78598606d5525e47c37721eee773526dd7 100755
--- a/scripts/poe-tasks/docs
+++ b/scripts/poe-tasks/docs
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # ensure consistent behaviour
 src_dir="$(dirname "$(realpath "$0")")"
diff --git a/scripts/poe-tasks/examples b/scripts/poe-tasks/examples
index 45f2243680e85971025b16fb6a2e6aa3a4e64241..c214167aa47092692b6dffbcd27bdd40ec209a73 100755
--- a/scripts/poe-tasks/examples
+++ b/scripts/poe-tasks/examples
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # ensure consistent behaviour
 src_dir="$(dirname "$(realpath "$0")")"
diff --git a/scripts/poe-tasks/format b/scripts/poe-tasks/format
index fa113f192e7d2cdf4085231ff49cd576eae4cec3..0a83e3c2b27e04eed5bc87200c946566df566ca6 100755
--- a/scripts/poe-tasks/format
+++ b/scripts/poe-tasks/format
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # ensure consistent behaviour
 src_dir="$(dirname "$(realpath "$0")")"
diff --git a/scripts/poe-tasks/gen-setuppy b/scripts/poe-tasks/gen-setuppy
index 752beea185df47b69b2ce2dfaff4f21c1b3baa5c..3f337b3907a9dbbad3c30587d287fb7a87f0d40e 100755
--- a/scripts/poe-tasks/gen-setuppy
+++ b/scripts/poe-tasks/gen-setuppy
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # ensure consistent behaviour
 src_dir="$(dirname "$(realpath "$0")")"
diff --git a/scripts/poe-tasks/kresctl b/scripts/poe-tasks/kresctl
index 4b4880b79b046c6cde3a59e1865054028dd1d4f4..e46ad3c13931d9271b2f8fbdc8d38ed4087c598b 100755
--- a/scripts/poe-tasks/kresctl
+++ b/scripts/poe-tasks/kresctl
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # ensure consistent behaviour
 src_dir="$(dirname "$(realpath "$0")")"
diff --git a/scripts/poe-tasks/man b/scripts/poe-tasks/man
index ba28e4142926e8da46866c5a3864066d54a0e94c..9b06b3602712ad6b84b50a4b188d2b02fd70e13f 100755
--- a/scripts/poe-tasks/man
+++ b/scripts/poe-tasks/man
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # ensure consistent behaviour
 src_dir="$(dirname "$(realpath "$0")")"
@@ -6,4 +6,4 @@ source $src_dir/_env.sh
 
 build_kresd
 
-man -l .install_kresd/share/man/man8/$1*
\ No newline at end of file
+man -l .install_kresd/share/man/man8/$1*
diff --git a/scripts/poe-tasks/run b/scripts/poe-tasks/run
index c1bdf78b88ce24976e98cd4ce855e5b9fcb229d4..f217988da6b4a199587ad56cb9f481842434d82c 100755
--- a/scripts/poe-tasks/run
+++ b/scripts/poe-tasks/run
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # ensure consistent behaviour
 src_dir="$(dirname "$(realpath "$0")")"
diff --git a/scripts/poe-tasks/run-debug b/scripts/poe-tasks/run-debug
index b48f235911d4271b160e7c5b1ba0998dd0387d9c..661b7fe2b1470339d8e9582cd3836072f2fc78e1 100755
--- a/scripts/poe-tasks/run-debug
+++ b/scripts/poe-tasks/run-debug
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # ensure consistent behaviour
 src_dir="$(dirname "$(realpath "$0")")"
@@ -10,4 +10,4 @@ echo The manager will start after you connect
 echo API will be running on port 5000
 echo ----------------------------------------
 
-KRES_DEBUG_MANAGER=1 poe run $@
\ No newline at end of file
+KRES_DEBUG_MANAGER=1 poe run $@
diff --git a/scripts/poe-tasks/test b/scripts/poe-tasks/test
index 0f451b6805f16232fa981858e416ccc05e349c11..3c1d7a9ccbf42714e2f5d9c890c46d3beacdfcbd 100755
--- a/scripts/poe-tasks/test
+++ b/scripts/poe-tasks/test
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # ensure consistent behaviour
 src_dir="$(dirname "$(realpath "$0")")"
diff --git a/scripts/run-pylint.sh b/scripts/run-pylint.sh
index 92413826ce2f81c7d736d98625d93dbafbcf9f98..653d54bd6b44fa8d8e63fdd9fa8629675989e24a 100755
--- a/scripts/run-pylint.sh
+++ b/scripts/run-pylint.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 set -o errexit -o nounset
 
diff --git a/scripts/run-scanbuild-with-args.sh b/scripts/run-scanbuild-with-args.sh
index b2954536be55cd7d2e8bf8312cc81cd6137e8d15..fa4a98cd0efd15640d9421173aad7220f660e430 100755
--- a/scripts/run-scanbuild-with-args.sh
+++ b/scripts/run-scanbuild-with-args.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 set -o errexit -o nounset
 
diff --git a/scripts/test-config.sh b/scripts/test-config.sh
index 695e5182a2e82fb7c75b3298463c54c114a6a6ec..2b55066dd3ace8b3fb85934e730875e9e1ab88ba 100755
--- a/scripts/test-config.sh
+++ b/scripts/test-config.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 # Utility script used by meson to run config tests post installation
 set -o nounset -o errexit
diff --git a/scripts/test-integration-prepare.sh b/scripts/test-integration-prepare.sh
index 13db1438feda04ab9ac4f207b22a1a1541283a66..17f08df3d544c421f39b2efb82fc5113e87b8db7 100755
--- a/scripts/test-integration-prepare.sh
+++ b/scripts/test-integration-prepare.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 set -o errexit -o nounset
 
diff --git a/scripts/update-authors.sh b/scripts/update-authors.sh
index 8ccb77ed17e4ae50ecf238cde9f76e6e7c25707e..4e2f680680619ff9adff5ac5949d6c7aaf696ae2 100755
--- a/scripts/update-authors.sh
+++ b/scripts/update-authors.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 # avoid confusing changes in ordering
diff --git a/scripts/update-root-hints.sh b/scripts/update-root-hints.sh
index 5f7a564bee45d4d5d830a5b34ce07e002c0779b5..862d834bd988823810ed7d41453f3350e5753b0f 100755
--- a/scripts/update-root-hints.sh
+++ b/scripts/update-root-hints.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 set -o nounset -o xtrace
 
diff --git a/scripts/upstream-version.sh b/scripts/upstream-version.sh
index 77613b7058280a9d3aa6571241c3099f0ca3b8bb..4efa42dbd450097f7e39d757e22a73cc8a835ce9 100755
--- a/scripts/upstream-version.sh
+++ b/scripts/upstream-version.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
 #
 # return latest upstream version of Knot Resolver
diff --git a/tests/dnstap/src/dnstap-test/run.sh b/tests/dnstap/src/dnstap-test/run.sh
index 70d822546ad4a0ff5233f5ccbc1c62a9cd27d720..f1ed9fb2692a273e34fe6d36afb0c448285e678c 100755
--- a/tests/dnstap/src/dnstap-test/run.sh
+++ b/tests/dnstap/src/dnstap-test/run.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 set -e
 KRESD_CMD=$1
 MESON_BUILD_ROOT=$(pwd)
diff --git a/tests/integration/deckard b/tests/integration/deckard
index b5b338678d48a9807097000afe03ebfdf705f7a3..0e100ff13d4df3208d63b74ab4812b7e2a0c17bf 160000
--- a/tests/integration/deckard
+++ b/tests/integration/deckard
@@ -1 +1 @@
-Subproject commit b5b338678d48a9807097000afe03ebfdf705f7a3
+Subproject commit 0e100ff13d4df3208d63b74ab4812b7e2a0c17bf
diff --git a/tests/packaging/dependencies.py b/tests/packaging/dependencies.py
index 324ff30b4a8642054aeb70d1c72b6a1282b9cb4e..1262d2e15f65b11ddad4c238e6cea257ec56417b 100755
--- a/tests/packaging/dependencies.py
+++ b/tests/packaging/dependencies.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/bin/env python3
 
 import importlib
 import importlib.util
diff --git a/tests/packaging/interactive/cache-clear.sh b/tests/packaging/interactive/cache-clear.sh
index 377cf5d329685c329459432d557ac308269c1fc8..79d88a123f4d31a4b375a626cad1581b85fea478 100755
--- a/tests/packaging/interactive/cache-clear.sh
+++ b/tests/packaging/interactive/cache-clear.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # clear full cache
 kresctl cache clear
diff --git a/tests/packaging/interactive/etag.sh b/tests/packaging/interactive/etag.sh
index f14ef96a5c94503fcea4c607ad5421b72eb9880f..3a9de46cc711170682aa7beb453ca030130a8701 100755
--- a/tests/packaging/interactive/etag.sh
+++ b/tests/packaging/interactive/etag.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 set -e
 
diff --git a/tests/packaging/interactive/metrics.sh b/tests/packaging/interactive/metrics.sh
index 1ad48930e3052ebffbf9c6e0830513c03288c11b..63ac035d21d27ca56955ac8a54a159b830e80dae 100755
--- a/tests/packaging/interactive/metrics.sh
+++ b/tests/packaging/interactive/metrics.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 set -e
 
diff --git a/tests/packaging/interactive/reload.sh b/tests/packaging/interactive/reload.sh
index 9daa18901621d442e6732eb291714028a6db57e1..85bca315b826631d38262de2417e5745d1bc35ef 100755
--- a/tests/packaging/interactive/reload.sh
+++ b/tests/packaging/interactive/reload.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 set -e
 
diff --git a/tests/packaging/interactive/workers.sh b/tests/packaging/interactive/workers.sh
index 4f54f6aecf1857fa9903a20117bd5cbce2fdfc76..b23afcdbb2d077a9b47621d10f1f8997d0e0ff59 100755
--- a/tests/packaging/interactive/workers.sh
+++ b/tests/packaging/interactive/workers.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 expected_workers="5"
 
diff --git a/tests/packaging/knot-resolver.sh b/tests/packaging/knot-resolver.sh
index 6aa38bde30aa450b2b63d818df23feb684a99c55..2c252f7e3ecb659abe48fd016ebb6a5312f89395 100755
--- a/tests/packaging/knot-resolver.sh
+++ b/tests/packaging/knot-resolver.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # fail fast
 set -e
diff --git a/tests/packaging/kresctl.sh b/tests/packaging/kresctl.sh
index 579f1a10a669a495cc80ae207462af923ec3e1a5..aff02b6b2f9c32a3eb39117253ead861e02be7ec 100755
--- a/tests/packaging/kresctl.sh
+++ b/tests/packaging/kresctl.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # fail fast
 set -e
diff --git a/tests/packaging/systemd_service.sh b/tests/packaging/systemd_service.sh
index c6ac826b0a4d0248e850c624d3523eccc4f4c08e..9dec16ab8ad3a50c533ad72287a9385f2fdacf1f 100755
--- a/tests/packaging/systemd_service.sh
+++ b/tests/packaging/systemd_service.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 
 # fail fast
 set -e