O comando feh permite visualizar imagens dentro de uma pasta recursivamente:
feh --recursive --auto-zoom
Ao visualizar imagens, também permite associar comandos personalizados às teclas de 0 a 9 do teclado. Por exemplo, se eu quisesse que o terminal enviasse o nome do arquivo da imagem que eu estava visualizando (para o terminal), eu poderia fazer isso pressionando a tecla zero enquanto a imagem está sendo exibida executando feh
com um --action
argumento como este:
feh --recursive --auto-zoom --action "echo '%f'"
--action
vincula o comando echo '%f'
à tecla zero. %f
é o caminho relativo e se parece com isso quando enviado ./filename.jpg
.
No entanto, preciso feh
me fornecer o caminho absoluto em vez de um caminho relativo. Então, eu preciso cortar esse ponto e anexar o que resta no arquivo pwd
.
Esta é a minha tentativa de fazer isso:
feh --recursive --auto-zoom --cache-size 2048 --action "echo $(pwd)$(echo '%f' | cut -c 2-)}"
mas a saída fica assim:
/absolute/pathf
(observe o 'f' no final do pwd)
Como posso obter uma saída como essa? :
/absolute/path/filename.jpg
Apenas faça:
Aquilo é:
feh
(em vez de nada quefeh
trate o mesmo que.
) para que ele forneça o caminho completo dos arquivos dentro.%F
, não%f
para que a citação seja feita corretamente (você'%f'
engasgaria com nomes de arquivos contendo'
caracteres, o que até tornaria uma vulnerabilidade arbitrária de execução de comandos (imagine um arquivo chamado';reboot #.jpg
ou pior, por exemplo)).echo
que em geral não pode ser usado para exibir dados arbitrários.%
para o qual precisamos passarprintf
deve ser escapado como%%
(%s
sozinho seria expandidofeh
para o tamanho do arquivo).feh
. O argumento será literalmente:printf "%%s\n" %F
. Isso dizfeh
para invocar um shell (/bin/sh
) para interpretar esse código com 3 argumentos:sh
,-c
e esse código%%
foi alterado para%
e%F
alterado para o caminho do arquivo corretamente citado nash
sintaxe esh
, por sua vez, invocaráprintf
(o que está embutido na maioria dassh
implementações ) comprintf
e%s\n
o caminho completo do arquivo como argumentos.