Bash
從 feh 獲取絕對路徑
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
或更糟的文件))。- 不要使用
echo
which 通常不能用於顯示任意數據。%
我們需要傳遞給的文字printf
必須被轉義為%%
(%s
單獨將擴展feh
為文件的大小)。- 我們使用單引號(最強引號)作為傳遞給的動作參數
feh
。論點將是字面意思:printf "%%s\n" %F
。這告訴feh
呼叫一個 shell (/bin/sh
) 來解釋帶有 3 個參數的程式碼:sh
,-c
並且該程式碼%%
更改為%
並更改為語法中%F
正確引用的文件的路徑,並且反過來,將呼叫(在大多數實現中內置)和文件的完整路徑作為參數。sh``sh``printf``sh``printf``%s\n