我正在尝试通过 es.exe 命令行(其工作方式与 mlocate 类似)将从所有 voidtools检索到的文件名传递给“图像预览器”,例如 gwenview 或 nsxiv(在wsl环境中)。
这有效:
IFS=$'\n'; nsxiv $(es keyword1 keyword2)
但这不起作用:
IFS=$'\n'; nsxiv $(es $(wl-paste))
当前keyword1 keyword2
存储在系统剪贴板中。
user@wsl:~$ wl-paste | od -c
0000000 k e y w o r d 1 k e y w o r d
0000020 2 \n
0000022
为什么?我以为 $() 命令替换可以嵌套。但 nsxiv 返回No such file or directory
es 是将 es.exe 输出转换为匹配 wsl 环境的别名)
es() {
# Invoke the es.exe with provided arguments and pipe its output
# through sed to replace Windows-style line endings with Unix-style line endings,
# then use xargs to handle newline-delimited input and pass each path as a single argument to wslpath.
# -p argument - search paths
# -sort date-modified - sensible default
# 2>/dev/null - remove "xargs: wslpath: terminated by signal 13"
/mnt/c/Users/user/Downloads/ES-1.1.0.27.x64/es.exe -p -sort date-modified -instance 1.5a "$@" | sed 's/\r$//' | xargs -n1 -d'\n' wslpath 2>/dev/null
}