Sie können einen Wrapper-Befehl verwenden, der:
- benennt die Datei um
- führt den Viewer im Hintergrund aus
- Bereinigt, wenn der Betrachter zurückgekehrt ist, anstatt es
mutt
tun zu lassen.
Etwas wie:
#! /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 -- "$@"
) &
Und setzen Sie etwas wie:
image/*; muttv eog %s;
Wo muttv
ist das Skript oben?
Das Obige macht keine Annahme darüber, wo die Dateinamen in der Liste der Argumente erscheinen oder welche Zeichen sie enthalten ... Deshalb fragen wir zuerst, mutt
was es tmpdir
ist (also verwenden wir das, um zu bestimmen, wozu die Dateien gehören Ansicht ).
In den meisten Fällen wäre es jedoch übertrieben, und wie Gilles betont, funktioniert es möglicherweise nicht, wenn tmpdir relativ zu Ihrem Postfachordner angegeben wird.
Eine einfachere wäre:
#! /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"
) &
Ersetzen Sie mv
durch, cp
wenn Sie die von bereitgestellte Originaldatei nicht berühren möchten mutt
.