From: Bart Schaefer <schaefer@brasslantern.com>
To: zsh workers <zsh-workers@zsh.org>
Subject: Failed process substitution on x=$~y (Re: Unexpected foo==bar errors)
Date: Sun, 14 Feb 2016 12:10:12 -0800 [thread overview]
Message-ID: <160214121012.ZM21020@torch.brasslantern.com> (raw)
In-Reply-To: <CAHYJk3R6TPvc9mSRv8ERi5Uo=GKgzbAZBJ1V7uEt42QnsJUfQg@mail.gmail.com>
On Feb 8, 8:16pm, Mikael Magnusson wrote:
} Subject: Re: Unexpected foo==bar errors
}
} On Mon, Feb 8, 2016 at 7:45 PM, Bart Schaefer <schaefer@brasslantern.com> wrote:
} > On Feb 8, 4:52am, Mikael Magnusson wrote:
} > } I wonder if there's anywhere in the completion system that depends on
} > } EQUALS being set... But maybe we should just 2> /dev/null the
} > } assignment since tilde expansion also prints errors. (_zattr and _zip
} > } also have this issue, presumably there are other places as well).
Looks like stderr is already redirected in _zattr.
} Well, considering that something simple as foo*.tar (expanding only to
} one file) also leaves $tf empty, I'd say it's better to leave $tf
} empty for any weird command substitutions as well, but suppress the
} error messages.
The following all use ${~param} in places where an error could occur if
the value looks like a process substitution:
Completion/Base/Utility/_arguments
Completion/Base/Widget/_correct_filename
Completion/Base/Widget/_most_recent_file
Completion/Unix/Command/_devtodo
Completion/Unix/Command/_make
Completion/Unix/Command/_ssh
Completion/Unix/Command/_tar
Completion/Unix/Command/_zip
Completion/Unix/Type/_canonical_paths
If for some reason one used a process substitution to locate the muttrc
file, Completion/Unix/Type/_mailboxes might also have that issue, but I
think that's wildly unlikely.
Some of these might warrant a closer look to see if it's a larger issue
to proceed with the resulting empty string.
diff --git a/Completion/Base/Utility/_arguments b/Completion/Base/Utility/_arguments
index 87fb20e..687c0c4 100644
--- a/Completion/Base/Utility/_arguments
+++ b/Completion/Base/Utility/_arguments
@@ -36,7 +36,7 @@ if (( long )); then
tmpargv=( "${(@)argv[1,long-1]}" ) # optspec's before --, if any
- name=${~words[1]}
+ name=${~words[1]} 2>/dev/null
[[ "$name" = [^/]*/* ]] && name="$PWD/$name"
name="_args_cache_${name}"
diff --git a/Completion/Base/Widget/_correct_filename b/Completion/Base/Widget/_correct_filename
index 7431a48..3150ffc 100644
--- a/Completion/Base/Widget/_correct_filename
+++ b/Completion/Base/Widget/_correct_filename
@@ -28,7 +28,7 @@ fi
if [[ $file = \~*/* ]]; then
tilde=${file%%/*}
- etilde=${~tilde}
+ etilde=${~tilde} 2>/dev/null
file=${file/#$tilde/$etilde}
fi
diff --git a/Completion/Base/Widget/_most_recent_file b/Completion/Base/Widget/_most_recent_file
index 68d1c91..e72cf5e 100644
--- a/Completion/Base/Widget/_most_recent_file
+++ b/Completion/Base/Widget/_most_recent_file
@@ -11,7 +11,7 @@
local file tilde etilde
if [[ $PREFIX = \~*/* ]]; then
tilde=${PREFIX%%/*}
- etilde=${~tilde}
+ etilde=${~tilde} 2>/dev/null
# PREFIX and SUFFIX have full command line quoting in, but we want
# any globbing characters which are quoted to stay quoted.
eval "file=($PREFIX*$SUFFIX(om[${NUMERIC:-1}]N))"
diff --git a/Completion/Unix/Command/_devtodo b/Completion/Unix/Command/_devtodo
index 2800f4a..dbc64f8 100644
--- a/Completion/Unix/Command/_devtodo
+++ b/Completion/Unix/Command/_devtodo
@@ -9,7 +9,7 @@ typeset expl
for ((i=2; i <= $#words; i++)) {
if [[ $words[$i] == '--database' ]]; then
- todo_opts+=(--database ${~words[$((++i))]})
+ todo_opts+=(--database ${~words[$((++i))]}) 2>/dev/null
elif [[ $words[$i] == '--sort' ]]; then
todo_opts+=(--sort ${words[$((++i))]})
fi
diff --git a/Completion/Unix/Command/_make b/Completion/Unix/Command/_make
index 48befa7..c3f3961 100644
--- a/Completion/Unix/Command/_make
+++ b/Completion/Unix/Command/_make
@@ -129,7 +129,7 @@ _make-findBasedir () {
do
if [[ $@[index] == -C ]]
then
- file=${~@[index+1]};
+ file=${~@[index+1]} 2>/dev/null
if [[ -z $file ]]
then
# make returns with an error if an empty arg is given
diff --git a/Completion/Unix/Command/_ssh b/Completion/Unix/Command/_ssh
index c6ede9e..1f8f62c 100644
--- a/Completion/Unix/Command/_ssh
+++ b/Completion/Unix/Command/_ssh
@@ -622,7 +622,7 @@ _ssh_hosts () {
${opt_args[-l]:+"users=${opt_args[-l]:q}"} hosts "$@" && return
fi
if (( ind = ${words[(I)-F]} )); then
- config=${~words[ind+1]}
+ config=${~words[ind+1]} 2>/dev/null
else
config="$HOME/.ssh/config"
fi
diff --git a/Completion/Unix/Command/_tar b/Completion/Unix/Command/_tar
index 1e99ac0..4a24048 100644
--- a/Completion/Unix/Command/_tar
+++ b/Completion/Unix/Command/_tar
@@ -79,7 +79,7 @@ else
tf=${~words[tmp+1]}
_tar_cmd="f$_tar_cmd"
fi
-fi
+fi 2>/dev/null
# See if we should use a path prefix. We have to use eval as the dir can
# be any unevaluated thing which appears on the command line, including a
diff --git a/Completion/Unix/Command/_zip b/Completion/Unix/Command/_zip
index 171daf0..1040fa9 100644
--- a/Completion/Unix/Command/_zip
+++ b/Completion/Unix/Command/_zip
@@ -120,7 +120,7 @@ case $state in
zipfile=$testfile.ZIP
else
return 1
- fi
+ fi 2>/dev/null
if [[ $zipfile != $_zip_cache_name ]]; then
_zip_cache_name="$zipfile"
_zip_cache_list=( ${(f)"$(zipinfo -1 $_zip_cache_name)"} )
diff --git a/Completion/Unix/Type/_canonical_paths b/Completion/Unix/Type/_canonical_paths
index d23b913..e4a725b 100644
--- a/Completion/Unix/Type/_canonical_paths
+++ b/Completion/Unix/Type/_canonical_paths
@@ -61,7 +61,7 @@ _canonical_paths_get_canonical_path() {
_canonical_paths_add_paths () {
local origpref=$1 expref rltrim curpref canpref subdir
[[ $2 != add ]] && matches=()
- expref=${~origpref}
+ expref=${~origpref} 2>/dev/null
[[ $origpref == (|*/). ]] && rltrim=.
curpref=${${expref%$rltrim}:-./}
if zstat $curpref >&/dev/null; then
prev parent reply other threads:[~2016-02-14 20:09 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-07 15:57 Unexpected foo==bar errors Mikael Magnusson
2016-02-07 19:06 ` Peter Stephenson
2016-02-08 7:09 ` Bart Schaefer
2016-02-08 9:49 ` Peter Stephenson
2016-02-07 19:16 ` Bart Schaefer
2016-02-08 3:52 ` Mikael Magnusson
2016-02-08 18:45 ` Bart Schaefer
2016-02-08 19:16 ` Mikael Magnusson
2016-02-14 20:10 ` Bart Schaefer [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=160214121012.ZM21020@torch.brasslantern.com \
--to=schaefer@brasslantern.com \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).