Bash

從 feh 獲取絕對路徑

  • January 4, 2022

feh命令允許您遞歸地查看文件夾中的圖像:

feh --recursive --auto-zoom

在查看圖像時,它還允許您將自定義命令與鍵盤上的鍵 0-9 相關聯。例如,如果我希望終端輸出我正在查看的圖像的文件名(到終端),我可以通過在顯示圖像時按零鍵來實現,方法是執行feh如下--action參數:

feh --recursive --auto-zoom --action "echo '%f'"

--action將命令綁定echo '%f'到零鍵。%f是相對路徑,輸出時看起來像這樣./filename.jpg

但是,我需要feh給我絕對路徑而不是相對路徑。所以,我需要切斷那個點,然後將剩下的附加到pwd.

這是我的嘗試:

feh --recursive --auto-zoom --cache-size 2048 --action "echo $(pwd)$(echo '%f' | cut -c 2-)}"

但輸出如下所示:

/absolute/pathf

(注意密碼末尾的“f”)

我怎樣才能實現這樣的輸出?:

/absolute/path/filename.jpg

做就是了:

feh --recursive --auto-zoom --action 'printf "%%s\n" %F' "$PWD"

那是:

  • 將目前工作目錄的完整路徑傳遞給feh (而不是feh與 相同的任何內容.),因此它將為您提供其中文件的完整路徑。
  • 使用%F,而不是%f正確完成引用(您'%f'會阻塞包含'字元的文件名,這甚至會使其成為任意命令執行漏洞(例如,想像一個名為';reboot #.jpg或更糟的文件))。
  • 不要使用echowhich 通常不能用於顯示任意數據。
  • %我們需要傳遞給的文字printf必須被轉義為%%%s單獨將擴展feh為文件的大小)。
  • 我們使用單引號(最強引號)作為傳遞給的動作參數feh。論點將是字面意思:printf "%%s\n" %F。這告訴feh呼叫一個 shell ( /bin/sh) 來解釋帶有 3 個參數的程式碼:sh-c並且該程式碼%%更改為%並更改為語法中%F正確引用的文件的路徑,並且反過來,將呼叫(在大多數實現中內置)和文件的完整路徑作為參數。sh``sh``printf``sh``printf``%s\n

引用自:https://unix.stackexchange.com/questions/684802