@@ -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
old mode 100755
new mode 100644
old mode 100755
new mode 100644
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