Estou tentando passar nomes de arquivos recuperados de tudo que é voidtools por meio da linha de comando es.exe (funciona de forma semelhante ao mlocate) para um "visualizador de imagens" como gwenview ou nsxiv (no ambiente wsl ).
Isso funciona:
IFS=$'\n'; nsxiv $(es keyword1 keyword2)
Mas isso não funciona:
IFS=$'\n'; nsxiv $(es $(wl-paste))
quando keyword1 keyword2
está atualmente armazenado na área de transferência do sistema.
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
Por que? Eu pensei que a substituição do comando $() pudesse ser aninhada. Em vez disso, nsxiv retornaNo such file or directory
es é um alias que converte a saída es.exe para corresponder ao ambiente 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
}