Câu trả lời:
Đây là những gì tôi sử dụng:
.mailcap:
application/*; mkdir -p /tmp/mutt \; cp %s /tmp/mutt \; xdg-open /tmp/mutt/$(basename %s) &
.mutt / muttrc:
folder-hook . `rm -f /tmp/mutt/*`
Mỗi lần thử mở tệp đính kèm, nó sẽ được sao chép trong thư mục tạm thời dành riêng và bản sao được mở.
Mỗi khi bạn bắt đầu mutt
, bất kỳ bản sao còn sót lại sẽ được dọn sạch.
Bạn có thể cần hoặc không cần &
đến cuối, tùy thuộc vào lệnh bạn đã sử dụng. (Một số phiên bản xdg-open
đang chặn, trong khi các phiên bản khác thì không.)
Không cần phải nói, bạn có thể sử dụng điều này với bất kỳ lệnh nào. xdg-open
chỉ là một xử lý một cửa thuận tiện.
&
sau khi mở xdg. Không thể làm tổn thương để có nó ở đó trong mọi trường hợp, phải không?
mailcap
bằng xdg-open
? và sao chép câu trả lời đó Tôi chắc chắn có một số người với câu hỏi đó.
text/html; t=$(mktemp /tmp/XXXXXXXXXX) \; cp %s "$t" \; /bin/sh -c "firefox $t \; rm $t \;" &
shutdown-hook
thay thế; Điều này chỉ làm trống thư mục tmp khi tắt mutt.
Bạn có thể sử dụng lệnh bao bọc:
mutt
làm điều đó.Cái gì đó như:
#! /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 -- "$@"
) &
Và đặt một cái gì đó như:
image/*; muttv eog %s;
Trong trường hợp muttv
là kịch bản ở trên.
Ở trên không có giả định về nơi (các) tên tệp xuất hiện trong danh sách các đối số hoặc ký tự chúng chứa ... Đó là lý do tại sao trước tiên chúng ta hỏi mutt
nó tmpdir
là gì (vì vậy chúng tôi sử dụng nó để xác định các tệp là gì xem ).
Trong hầu hết các trường hợp, nó sẽ là quá mức cần thiết và như Gilles chỉ ra có thể không hoạt động nếu tmpdir được chỉ định là có liên quan đến thư mục hộp thư của bạn.
Một cách đơn giản hơn sẽ là:
#! /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"
) &
Thay thế mv
bằng cp
nếu bạn không muốn chạm vào tệp gốc được cung cấp bởi mutt
.
.muttrc
vì tmpdir="=tmp"
. Tại sao không lấy thư mục từ tên tập tin?
new-$original
see
vào dòng lệnh, tôi không hy vọng nó sẽ xóa tệp, ngay cả khi nó nằm trong /tmp
!) Giải pháp: tạo một liên kết cứng.