添付ファイルが返されるのを待たないようにmuttにどのように指示しますか?

添付ファイルが返されるのを待たないようにmuttにどのように指示しますか?

私の画像には次の行を使用してくださいmailcap

image/*; eog %s &;

ただし、muttはすぐに一時ファイルを削除し、eogはそれをロードできません。 muttを
削除すると、&コマンドラインから離れるまでeogが閉じるのを待ちます。

答え1

これが私が使用するものです:

.mailcap:

application/*; mkdir -p /tmp/mutt \; cp %s /tmp/mutt \; xdg-open /tmp/mutt/$(basename %s) &

.mutt/muttrc:

folder-hook . `rm -f /tmp/mutt/*`

添付ファイルを開こうとするたびに、プライベート一時ディレクトリにコピーされ、コピーが開きます。残りのコピーは
起動するたびにmutt消去されます。

&使用するコマンドによっては、最終的にこれが必要な場合もあれば必要ではない場合もあります。 (一部のバージョンはxdg-openブロックされ、他のバージョンはブロックされません。)

言うまでもなく、どのコマンドでも使用できます。xdg-openただ便利なワンストップ店です。

答え2

ラッパーコマンドを使用できます。

  1. ファイル名の変更
  2. バックグラウンドでビューアを実行する
  3. 観客が戻ってきたら、そのままにしておくのではなく、消してくださいmutt

それは次のとおりです。

#! /bin/sh -

TMPDIR=$(
  mutt -D 2> /dev/null |
    awk -F\" '
      $1 == "tmpdir=" {
        gsub("~", ENVIRON["HOME"], $2)
        print $2
        exit
      }'
)
[ -n "$TMPDIR" ] || exit
export TMPDIR

nargs=$#
nfiles=0
for i do
  case $i in
    ("$TMPDIR"/?*)
      new_file=$(mktemp -ut "XXXXX${i##*/}") &&
        mv -- "$i" "$new_file" &&
        nfiles=$(($nfiles + 1)) &&
        set -- "$new_file" "$@" "$new_file" &&
        continue
  esac
  set -- "$@" "$i"
done

run_command() (
  shift "$(($nargs + $nfiles))"
  exec "$@"
)

(
  run_command "$@"
  while [ "$nfiles" -gt 0 ]; do
    set -- "$@" "$1"
    shift
    nfiles=$(($nfiles - 1))
  done
  shift "$((2*$nargs))"
  rm -f -- "$@"
) &

次のような内容を入力します。

image/*; muttv eog %s;

muttv上記のスクリプトはどこにありますか?

上記は、パラメータリストにファイル名が表示される場所や埋め込み文字については想定していません。これが私たちが最初にファイル名がmutt何でtmpdirあるかを尋ねる理由です。したがって、これを使用してファイルが何であるかを確認します。より)。

これはほとんどの場合過剰である可能性があり、Gillesが指摘したように、メールボックスフォルダにtmpdirを指定すると機能しない可能性があります。

より簡単なことは次のとおりです。

#! /bin/sh -
nargs=$#
eval "file=\${$nargs}"
newfile=$(dirname -- "$file")/new-$(basename -- "$file")
while [ "$nargs" -gt 1 ]; do
  set -- "$@" "$1"
  shift
  nargs=$(($nargs - 1))
done
shift
mv -- "$file" "$newfile" || exit
(
  "$@" "$newfile"
  rm -f -- "$newfile"
) &

提供されたソースファイルに触れたくない場合はmvcpmutt

関連情報