From 35cce6ea6375c8f2e36d4569776f837fcac64289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= Date: Sat, 3 Apr 2021 01:34:58 +0200 Subject: [PATCH] bash_completion.d: always call zfs/zpool binaries directly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /dev/zfs is 0:0 666 on most systems, so the [ -w /dev/zfs ] check always succeeds, but if zfs isn't in $PATH (e.g. when completing from "/sbin/zfs list" on a regular account) this can lead to error spew like nabijaczleweli@szarotka:~$ /sbin/zfs list bash: zfs: command not found @ bash: zfs: command not found We only do read-only commands, and quite general ones at that, so there's no need to elevate one way or another. Reviewed-by: Brian Behlendorf Signed-off-by: Ahelenia ZiemiaƄska Closes #11828 --- contrib/bash_completion.d/.gitignore | 1 + contrib/bash_completion.d/Makefile.am | 5 ++++- contrib/bash_completion.d/{zfs => zfs.in} | 11 +++-------- 3 files changed, 8 insertions(+), 9 deletions(-) create mode 100644 contrib/bash_completion.d/.gitignore rename contrib/bash_completion.d/{zfs => zfs.in} (98%) diff --git a/contrib/bash_completion.d/.gitignore b/contrib/bash_completion.d/.gitignore new file mode 100644 index 0000000000..0fd9cc63af --- /dev/null +++ b/contrib/bash_completion.d/.gitignore @@ -0,0 +1 @@ +/zfs diff --git a/contrib/bash_completion.d/Makefile.am b/contrib/bash_completion.d/Makefile.am index 4f13af6b3c..8fbe03688b 100644 --- a/contrib/bash_completion.d/Makefile.am +++ b/contrib/bash_completion.d/Makefile.am @@ -1,5 +1,8 @@ +include $(top_srcdir)/config/Substfiles.am + bashcompletiondir = $(sysconfdir)/bash_completion.d noinst_DATA = zfs -EXTRA_DIST = $(noinst_DATA) +EXTRA_DIST += $(noinst_DATA) +SUBSTFILES += $(noinst_DATA) diff --git a/contrib/bash_completion.d/zfs b/contrib/bash_completion.d/zfs.in similarity index 98% rename from contrib/bash_completion.d/zfs rename to contrib/bash_completion.d/zfs.in index 094527340c..8898fc735c 100644 --- a/contrib/bash_completion.d/zfs +++ b/contrib/bash_completion.d/zfs.in @@ -21,13 +21,8 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. -if [[ -w /dev/zfs ]]; then - __ZFS_CMD="zfs" - __ZPOOL_CMD="zpool" -else - __ZFS_CMD="sudo zfs" - __ZPOOL_CMD="sudo zpool" -fi +__ZFS_CMD="@sbindir@/zfs" +__ZPOOL_CMD="@sbindir@/zpool" # Disable bash's built-in hostname completion, as this makes it impossible to # provide completions containing an @-sign, which is necessary for completing @@ -198,7 +193,7 @@ __zfs_complete_multiple_options() COMPREPLY=($(compgen -W "$options" -- "${cur##*,}")) local existing_opts=$(expr "$cur" : '\(.*,\)') - if [[ $existing_opts ]] + if [[ $existing_opts ]] then COMPREPLY=( "${COMPREPLY[@]/#/${existing_opts}}" ) fi