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" "[email protected]" "$new_file" &&
continue
esac
set -- "[email protected]" "$i"
done
run_command() (
shift "$(($nargs + $nfiles))"
exec "[email protected]"
)
(
run_command "[email protected]"
while [ "$nfiles" -gt 0 ]; do
set -- "[email protected]" "$1"
shift
nfiles=$(($nfiles - 1))
done
shift "$((2*$nargs))"
rm -f -- "[email protected]"
) &
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 -- "[email protected]" "$1"
shift
nargs=$(($nargs - 1))
done
shift
mv -- "$file" "$newfile" || exit
(
"[email protected]" "$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.