उत्परिवर्तन कार्यक्रम को वापस करने के लिए इंतजार न करने के लिए कैसे बताएं?


9

मैं अपने चित्रों के लिए इस लाइन का उपयोग करता हूं mailcap:

image/*; eog %s &;

लेकिन उत्परिवर्तन तुरंत अस्थायी फ़ाइल को हटा देता है और eog इसे लोड नहीं कर सकता है।
जब मैं हटाता हूं, &तब तक जब तक कि वह कमांड लाइन से बच न जाए, तब तक मग का इंतजार किया जाता है।

जवाबों:


9

यहाँ मेरा उपयोग है:

.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बस एक सुविधाजनक वन-स्टॉप हैंडलर है।


यह मेल का स्थान लेने का एक सामान्य तरीका है! धन्यवाद!
प्रोफ़ेसटच १ '

मुझे जरूरत थी &xdg-open की। किसी भी मामले में, वहाँ सही है चोट नहीं कर सकते?
प्रोफ़ेसटच

कैसे बदलने के लिए: हो सकता है आप एक प्रश्न कर सकता है mailcapके साथ xdg-open? और उस उत्तर की प्रतिलिपि बनाएँ। मुझे यकीन है कि उस सवाल के साथ कुछ लोग हैं।
प्रोफ़ेसटच

2
यह समस्याग्रस्त नहीं होगा यदि आपके पास म्यूट बदलते फ़ोल्डर द्वारा खोले गए कई एप्लिकेशन हैं, जो आपके / tmp / mutt / फ़ोल्डर में कुछ भी मिटा देगा। चूंकि xdg- खुला हो सकता है या मैं ब्लॉक नहीं कर रहा हूं इसलिए मैं केवल एप्लिकेशन (फ़ायरफ़ॉक्स) का उपयोग कर रहा हूं text/html; t=$(mktemp /tmp/XXXXXXXXXX) \; cp %s "$t" \; /bin/sh -c "firefox $t \; rm $t \;" &
डेरेक श्रोक

मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन मुझे अभी यह पता चला है क्योंकि मैं मठ की स्थापना के साथ विशेषज्ञता हासिल कर रहा हूं। मेरा समाधान यह था कि नेओमुट के shutdown-hookबजाय इसका उपयोग किया जाए ; जब म्यूट बंद हो जाता है तो यह सिर्फ tmp dir को खाली करता है।
२०:२० पर

3

आप एक आवरण आदेश का उपयोग कर सकते हैं:

  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वह लिपि कहां है।

उपरोक्त कोई तर्क नहीं देता है कि तर्कों की सूची में फ़ाइल नाम (s) कहां दिखाई देता है या उनमें कौन सा वर्ण है ... जिसके कारण हम सबसे पहले पूछते हैं muttकि इसका क्या tmpdirहै (इसलिए हम इसका उपयोग यह निर्धारित करने के लिए करते हैं कि फाइलें क्या हैं देखें )।

ज्यादातर मामलों में, यह ओवरकिल होगा, और जैसा कि गाइल्स बताते हैं कि अगर आपके मेलबॉक्स फ़ोल्डर के लिए 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"
) &

बदलें mvके साथ cpयदि आप द्वारा प्रदान की मूल फ़ाइल को छूने के लिए नहीं करना चाहती mutt


हे गोश, क्या तुमने अभी लिखा है कि खरोंच से? मुझे यह समझने में 15 मिनट लगे कि आप क्या कर रहे हैं और अब भी मुझे इस बात पर यकीन नहीं है कि कुछ हिस्से कैसे काम करते हैं।
Profpatsch

मेरी .muttrcवजह से विफल रहता है tmpdir="=tmp"। फ़ाइल नाम से निर्देशिका क्यों नहीं ली गई?
गिलेस एसओ- बुराई को रोकना '

@ गिल्स, "+", "=" के बारे में अच्छी बात है ... पूरे बिंदु को म्यूट से tmpdir प्राप्त करना था, इसलिए हम जानते हैं कि कौन सा तर्क फ़ाइल नाम है। पूरी बात थोड़ी अधिक है, हालांकि वैसे भी 99% मामलों में फ़ाइलनाम केवल एक बार होने वाला है और अंतिम तर्क हो सकता है, और हम इसे केवल नाम बदल सकते हैंnew-$original
स्टीफन चेज़लस

एक और बिंदु यह है कि इस प्रविष्टि स्क्रिप्ट को हमेशा म्यूट की ओर से नहीं बुलाया जाता है, इसे उन परिस्थितियों में कहा जा सकता है जहां फ़ाइल एक अस्थायी फ़ाइल नहीं है और इसे हटाया नहीं जाना चाहिए। (मैं अक्सर seeकमांड लाइन पर कॉल करता हूं, मुझे उम्मीद नहीं है कि यह फ़ाइल को हटा देगा, भले ही यह अंदर हो /tmp!) समाधान: एक कठिन लिंक बनाएं।
गिल्स एसओ- बुराई को रोकना '

@ गिल्स, मैंने हार्डलिंक के बारे में सोचा, लेकिन म्यूट के लिए, यह काम नहीं करता है, क्योंकि कमांड चलाने के बाद, म्यूट फाइल को अनलिंक करने से पहले ट्रंकट कर देता है। (O_TRUNC के साथ खुला और बंद, मैंने इसे सत्यापित किया)।
स्टीफन चेजलस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.