diff mbox series

[ovs-dev] utilities/bashcomp: Fix incorrect file mode

Message ID 20220708065259.2280281-1-frode.nordahl@canonical.com
State Accepted
Commit cfba9515851832ff63d208528576b281a49309d0
Headers show
Series [ovs-dev] utilities/bashcomp: Fix incorrect file mode | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test fail github build: failed
ovsrobot/intel-ovs-compilation success test: success

Commit Message

Frode Nordahl July 8, 2022, 6:52 a.m. UTC
The bash completion scripts shipped with Open vSwitch currently
have the executable bit set.  This is problematic because the
files do not start with a shebang and as such a user may end up
executing them using the wrong shell.  When installed in a system
the bash shell will source these files and not execute them.

This also triggers Debian lintian warnings [0] and defies Debian
policy [1].

0: https://lintian.debian.org/tags/executable-not-elf-or-script
1: https://www.debian.org/doc/debian-policy/ch-files.html#scripts
Fixes: 423ede182b65 ("utilities: Add bash command-line completion script.")
Signed-off-by: Frode Nordahl <frode.nordahl@canonical.com>
---
 tests/completion.at                | 106 ++++++++++++++---------------
 utilities/ovs-appctl-bashcomp.bash |   0
 utilities/ovs-vsctl-bashcomp.bash  |   0
 3 files changed, 53 insertions(+), 53 deletions(-)
 mode change 100755 => 100644 utilities/ovs-appctl-bashcomp.bash
 mode change 100755 => 100644 utilities/ovs-vsctl-bashcomp.bash

Comments

Ilya Maximets July 12, 2022, 1:59 p.m. UTC | #1
On 7/8/22 08:52, Frode Nordahl wrote:
> The bash completion scripts shipped with Open vSwitch currently
> have the executable bit set.  This is problematic because the
> files do not start with a shebang and as such a user may end up
> executing them using the wrong shell.  When installed in a system
> the bash shell will source these files and not execute them.
> 
> This also triggers Debian lintian warnings [0] and defies Debian
> policy [1].
> 
> 0: https://lintian.debian.org/tags/executable-not-elf-or-script
> 1: https://www.debian.org/doc/debian-policy/ch-files.html#scripts
> Fixes: 423ede182b65 ("utilities: Add bash command-line completion script.")
> Signed-off-by: Frode Nordahl <frode.nordahl@canonical.com>
> ---

Makes sense.  Applied to master and branch-2.17.
Thanks!

Best regards, Ilya Maximets.
diff mbox series

Patch

diff --git a/tests/completion.at b/tests/completion.at
index 00e3a46b8..b6155af25 100644
--- a/tests/completion.at
+++ b/tests/completion.at
@@ -351,22 +351,22 @@  OVS_VSWITCHD_START
 TMP="$(ovs-vsctl --commands | cut -d',' -f1-2 | tr -d ',[[]]' | tr -s ' ' '\n')
 $(ovs-vsctl --options | grep -- '--' | sed -e 's/=.*$/=/g')"
 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--db=unix:$OVS_RUNDIR/db.sock "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "--db=unix:$OVS_RUNDIR/db.sock "],
 [0], [dnl
 ${MATCH}
 ])
 # complete ovs-vsctl [TAB]
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test ""],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test ""],
 [0], [dnl
 ${MATCH}
 ])
 
 # complete on global options.
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--dry-run "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "--dry-run "],
 [0], [dnl
 ${MATCH}
 ])
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--dry-run --pretty "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "--dry-run --pretty "],
 [0], [dnl
 ${MATCH}
 ])
@@ -374,7 +374,7 @@  ${MATCH}
 # complete on local options.
 TMP="$(ovs-vsctl --commands | grep -- '--may-exist' | cut -d',' -f1-2 | tr -d ',[[]]' | tr -s ' ' '\n' | grep -v -- '--may-exist')"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--may-exist "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "--may-exist "],
 [0], [dnl
 ${MATCH}
 ])
@@ -385,37 +385,37 @@  ${MATCH}
 # test !.  no following arguments are expanded.
 TMP="$(ovsdb-client --no-heading list-tables)"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set "],
 [0], [dnl
 ${MATCH}
 ])
 # test ?.  will show completions for both current and following arguments.
 ovs-vsctl br-set-external-id br0 bridge-id br0
 MATCH="$(PREPARE_MATCH_SPACE(bridge-id --))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-get-external-id br0 "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "br-get-external-id br0 "],
 [0], [dnl
 ${MATCH}
 ])
 # test *.  argument with this prefix could be completed for zero or more times.
 TMP="$(ovs-vsctl --no-heading --columns=_uuid,name list Bridge | tr -d '\"')"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP} --))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "destroy Bridge "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "destroy Bridge "],
 [0], [dnl
 ${MATCH}
 ])
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "destroy Bridge br0 "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "destroy Bridge br0 "],
 [0], [dnl
 ${MATCH}
 ])
 # test +.  the first time, an argument is required, after that, it becomes '*'.
 TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Bridge | awk '/key.*value/ { print $1":"; next } { print $1; next }')"
 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set Bridge br0 "],
 [0], [dnl
 ${MATCH}
 ])
 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP} --))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:random_key=123 "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:random_key=123 "],
 [0], [dnl
 ${MATCH}
 ])
@@ -453,12 +453,12 @@  OVS_VSWITCHD_START(
 #
 TMP="$(ovsdb-client --no-heading list-tables)"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set "],
 [0], [dnl
 ${MATCH}
 ])
 MATCH="$(PREPARE_MATCH_SPACE(Open_vSwitch))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Open"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set Open"],
 [0], [dnl
 ${MATCH}
 ])
@@ -469,13 +469,13 @@  ${MATCH}
 #
 TMP="$(ovs-vsctl --no-heading --columns=_uuid list Open_vSwitch | tr -d '\"')"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Open_vSwitch "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set Open_vSwitch "],
 [0], [dnl
 ${MATCH}
 ])
 TMP="$(ovs-vsctl --no-heading --columns=_uuid,name list Bridge | tr -d '\"')"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set Bridge "],
 [0], [dnl
 ${MATCH}
 ])
@@ -486,13 +486,13 @@  ${MATCH}
 #
 TMP="$(ovs-vsctl list-br)"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-to-vlan "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "br-to-vlan "],
 [0], [dnl
 ${MATCH}
 ])
 # this also helps check the '_ovs_vsctl_check_startswith_string'.
 MATCH="$(PREPARE_MATCH_SPACE(--weird-br_name))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-to-vlan --"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "br-to-vlan --"],
 [0], [dnl
 ${MATCH}
 ])
@@ -503,14 +503,14 @@  ${MATCH}
 #
 TMP="$(ovs-vsctl --no-heading --columns=name list Port | tr -d '\"')"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "port-to-br "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "port-to-br "],
 [0], [dnl
 ${MATCH}
 ])
 # complete on ports in particular bridge.
 TMP="$(ovs-vsctl list-ports br0)"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "del-port br0 "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "del-port br0 "],
 [0], [dnl
 ${MATCH}
 ])
@@ -523,7 +523,7 @@  for br in `ovs-vsctl list-br`; do
     TMP="${TMP} $(ovs-vsctl list-ifaces $br)"
 done
 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "iface-to-br "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "iface-to-br "],
 [0], [dnl
 ${MATCH}
 ])
@@ -533,7 +533,7 @@  ${MATCH}
 # test: _ovs_vsctl_complete_bridge_fail_mode
 #
 MATCH="$(PREPARE_MATCH_SPACE(standalone secure))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-fail-mode br0 "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set-fail-mode br0 "],
 [0], [dnl
 ${MATCH}
 ])
@@ -542,25 +542,25 @@  ${MATCH}
 #
 # test: _ovs_vsctl_complete_key
 #
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "br-set-external-id br0 "],
 [0], [dnl
 
 ])
 # since there is no key added yet, we will only get our own input.
 MATCH="$(PREPARE_MATCH_SPACE(test_key))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 test_key"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "br-set-external-id br0 test_key"],
 [0], [dnl
 ${MATCH}
 ])
 # now add a key, as we should see it.
 ovs-vsctl br-set-external-id br0 bridge-id br0
 MATCH="$(PREPARE_MATCH_SPACE(bridge-id))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "br-set-external-id br0 "],
 [0], [dnl
 ${MATCH}
 ])
 MATCH="$(PREPARE_MATCH_SPACE(bridge-id --))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-get-external-id br0 "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "br-get-external-id br0 "],
 [0], [dnl
 ${MATCH}
 ])
@@ -571,7 +571,7 @@  ${MATCH}
 #
 # should just return the user input.
 MATCH="$(PREPARE_MATCH_SPACE(test_value --))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "br-set-external-id br0 bridge-id test_value"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "br-set-external-id br0 bridge-id test_value"],
 [0], [dnl
 ${MATCH}
 ])
@@ -583,13 +583,13 @@  ${MATCH}
 TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Open_vSwitch | tr -d ':' | cut -d' ' -f1)"
 UUID="$(ovs-vsctl --no-heading --columns=_uuid list Open_vSwitch | tr -d ' ')"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "clear Open_vSwitch $UUID "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "clear Open_vSwitch $UUID "],
 [0], [dnl
 ${MATCH}
 ])
 TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Bridge | tr -d ':' | cut -d' ' -f1)"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "clear Bridge br0 "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "clear Bridge br0 "],
 [0], [dnl
 ${MATCH}
 ])
@@ -597,7 +597,7 @@  ${MATCH}
 # so, with one specified COLUMN 'other_config', it should still complete on
 # COLUMNs, plus '--'.
 MATCH="$(PREPARE_MATCH_SPACE(${TMP} --))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "clear Bridge br0 other_config "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "clear Bridge br0 other_config "],
 [0], [dnl
 ${MATCH}
 ])
@@ -608,19 +608,19 @@  ${MATCH}
 #
 # with no key available, should always get user input.
 MATCH="$(PREPARE_MATCH_NOSPACE(random_key))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config random_key"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config random_key"],
 [0], [dnl
 ${MATCH}
 ])
 MATCH="$(PREPARE_MATCH_NOSPACE(abc))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config random_key=abc"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config random_key=abc"],
 [0], [dnl
 ${MATCH}
 ])
 # now add two random keys.
 ovs-vsctl set Bridge br0 other_config:random_key1=abc other_config:random_val1=xyz
 MATCH="$(PREPARE_MATCH_NOSPACE(random_key1= random_val1=))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config ran"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "add Bridge br0 other_config ran"],
 [0], [dnl
 ${MATCH}
 ])
@@ -632,25 +632,25 @@  ${MATCH}
 # at first, we should complete on column.
 TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Bridge | awk '/key.*value/ { print $1":"; next } { print $1; next }')"
 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set Bridge br0 "],
 [0], [dnl
 ${MATCH}
 ])
 MATCH="$(PREPARE_MATCH_NOSPACE(other_config:))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set Bridge br0 other"],
 [0], [dnl
 ${MATCH}
 ])
 # then, with the ':' we should complete on key.
 TMP="$(ovs-vsctl --no-heading --columns=other_config list Bridge br0 | tr -d '{\"}' | tr -s ', ' '\n' | cut -d'=' -f1)"
 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:"],
 [0], [dnl
 ${MATCH}
 ])
 # finally, if user fill in some value, we should just complete on user input.
 MATCH="$(PREPARE_MATCH_NOSPACE(random_val1))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:random_val1=12345"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set Bridge br0 other_config:random_val1=12345"],
 [0], [dnl
 ${MATCH}
 ])
@@ -661,12 +661,12 @@  ${MATCH}
 #
 touch private_key certificate
 MATCH="$(PREPARE_MATCH_SPACE(private_key))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-ssl priva"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set-ssl priva"],
 [0], [dnl
 ${MATCH}
 ])
 MATCH="$(PREPARE_MATCH_SPACE(certificate))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-ssl private_key cer"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set-ssl private_key cer"],
 [0], [dnl
 ${MATCH}
 ])
@@ -676,20 +676,20 @@  ${MATCH}
 # test: _ovs_vsctl_complete_target
 #
 MATCH="$(PREPARE_MATCH_NOSPACE(pssl: ptcp: punix: ssl: tcp: unix:))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-manager "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set-manager "],
 [0], [dnl
 ${MATCH}
 ])
 # filename completion on unix, punix.
 MATCH="$(PREPARE_MATCH_NOSPACE(testsuite.log))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-manager unix:test"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set-manager unix:test"],
 [0], [dnl
 ${MATCH}
 ])
 # no completion on other type, just return available types.
 # in real environment, bash will not complete on anything.
 MATCH="$(PREPARE_MATCH_NOSPACE(pssl: ptcp: punix: tcp: unix:))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set-manager ssl:something"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set-manager ssl:something"],
 [0], [dnl
 ${MATCH}
 ])
@@ -699,14 +699,14 @@  ${MATCH}
 # test: _ovs_vsctl_complete_new
 #
 # test 'add-br'
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-br "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "add-br "],
 [0], [dnl
 --- BEGIN MESSAGE
 Enter a new bridge:
 > ovs-vsctl add-br --- END MESSAGE
 ])
 # user input does not change the output.
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-br new-br"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "add-br new-br"],
 [0], [dnl
 --- BEGIN MESSAGE
 Enter a new bridge:
@@ -715,7 +715,7 @@  Enter a new bridge:
 # after specifying the new bridge name, we should complete on parent bridge.
 TMP="$(ovs-vsctl list-br)"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-br new-br "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "add-br new-br "],
 [0], [dnl
 ${MATCH}
 ])
@@ -724,7 +724,7 @@  ${MATCH}
 # of '*COLUMN?:KEY=VALUE'.
 TMP="$(ovsdb-client --no-heading list-columns Open_vSwitch Port | awk '/key.*value/ { print $1":"; next } { print $1; next }')"
 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP} --))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-port br0 new-port "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "add-port br0 new-port "],
 [0], [dnl
 ${MATCH}
 ])
@@ -736,13 +736,13 @@  ${MATCH}
 # after '--', there should be no global options available for completion.
 TMP="$(ovs-vsctl --commands | cut -d',' -f1-2 | tr -d ',[[]]' | tr -s ' ' '\n')"
 MATCH="$(PREPARE_MATCH_NOSPACE(${TMP}))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "init -- "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "init -- "],
 [0], [dnl
 ${MATCH}
 ])
 TMP="$(ovs-vsctl --no-heading --columns=name,_uuid list Port | tr -d '\"')"
 MATCH="$(PREPARE_MATCH_SPACE(${TMP} newp1 newp2))"
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "add-port br0 newp1 -- add-port br1 newp2 -- set Port "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "add-port br0 newp1 -- add-port br1 newp2 -- set Port "],
 [0], [dnl
 ${MATCH}
 ])
@@ -757,25 +757,25 @@  AT_SKIP_IF([eval 'test ${BASH_VERSINFO[[0]]} -lt 4'])
 OVS_VSWITCHD_START
 
 # complete non-matching command.
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "invalid"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "invalid"],
 [0], [dnl
 
 ])
 
 # complete after invalid command.
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "invalid argu"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "invalid argu"],
 [0], [dnl
 
 ])
 
 # complete non-matching end argument.
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set INVALID_"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set INVALID_"],
 [0], [dnl
 
 ])
 
 # complete after invalid intermediate argument.
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "set INVALID_TBL "],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "set INVALID_TBL "],
 [1], [dnl
 --- BEGIN MESSAGE
 Cannot complete 'INVALID_TBL' at index 3:
@@ -783,12 +783,12 @@  Cannot complete 'INVALID_TBL' at index 3:
 
 # complete ovs-vsctl --db=wrongdb [TAB]
 # should return 1 and show nothing.
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test "--db=wrongdb"],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test "--db=wrongdb"],
 [1], [])
 
 OVS_VSWITCHD_STOP
 # delete ovsdb-server and try again.
-AT_CHECK_UNQUOTED([ovs-vsctl-bashcomp.bash test ""],
+AT_CHECK_UNQUOTED([bash ovs-vsctl-bashcomp.bash test ""],
 [1], [])
 
 AT_CLEANUP
diff --git a/utilities/ovs-appctl-bashcomp.bash b/utilities/ovs-appctl-bashcomp.bash
old mode 100755
new mode 100644
diff --git a/utilities/ovs-vsctl-bashcomp.bash b/utilities/ovs-vsctl-bashcomp.bash
old mode 100755
new mode 100644