これ笑コマンドを使用すると、フォルダ内の画像を繰り返し表示できます。
feh --recursive --auto-zoom
画像を表示するときに、カスタムコマンドをキーボードの0〜9キーに関連付けることもできます。たとえば、端末に表示されている画像のファイル名を端末に出力させるには、画像が表示されている間に0キーを押して、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
(pwdの末尾にある「f」に注意してください)
どのようにそのような結果を得ることができますか? :
/absolute/path/filename.jpg
ベストアンサー1
ただし:
feh --recursive --auto-zoom --action 'printf "%%s\n" %F' "$PWD"
それは:
- 現在の作業ディレクトリのフルパスを
feh
(feh
と同じではありません.
)に渡すと、その中にあるファイルのフルパスが提供されます。 - このように適切に引用する
%F
代わりに使用してください(文字を含むファイル名が窒息し、任意のコマンド実行の脆弱性になる可能性があります(名前が悪いか、名前が悪いファイルを想像してみてください))。%f
'%f'
'
';reboot #.jpg
- 使用しないでください
echo
。通常、任意のデータを表示するために使用することはできません。 %
私たちが渡す必要があるテキストはprintf
エスケープする必要があります%%
(これだけでもファイルサイズが%s
拡張されます)。feh
- 私たちは一重引用符(最強引用符)を使用して、ジョブパラメータをに渡します
feh
。このパラメータのリテラルの意味はですprintf "%%s\n" %F
。これは、feh
呼び出すshell(/bin/sh
)に3つの引数を使用してコードを解釈するように指示します。このコードは構文で正しく参照されたファイルへのパスに変更され、そのファイルは順番に呼び出されます(ほとんどの実装に組み込まれています)。パラメーターとしてファイルの絶対パスを指定します。sh
-c
%%
%
%F
sh
sh
printf
sh
printf
%s\n