fehから絶対パスを取得する

fehから絶対パスを取得する

これコマンドを使用すると、フォルダ内の画像を繰り返し表示できます。

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"

それは:

  • 現在の作業ディレクトリのフルパスをfehfehと同じではありません.)に渡すと、その中にあるファイルのフルパスが提供されます。
  • このように適切に引用する%F代わりに使用してください(文字を含むファイル名が窒息し、任意のコマンド実行の脆弱性になる可能性があります(名前が悪いか、名前が悪いファイルを想像してみてください))。%f'%f''';reboot #.jpg
  • 使用しないでくださいecho。通常、任意のデータを表示するために使用することはできません。
  • %私たちが渡す必要があるテキストはprintfエスケープする必要があります%%(これだけでもファイルサイズが%s拡張されます)。feh
  • 私たちは一重引用符(最強引用符)を使用して、ジョブパラメータをに渡しますfeh。このパラメータのリテラルの意味はですprintf "%%s\n" %F。これは、feh呼び出すshell(/bin/sh)に3つの引数を使用してコードを解釈するように指示します。このコードは構文で正しく参照されたファイルへのパスに変更され、そのファイルは順番に呼び出されます(ほとんどの実装に組み込まれています)。パラメーターとしてファイルの絶対パスを指定します。sh-c%%%%Fshshprintfshprintf%s\n

おすすめ記事