Stderr को dev/null पर भेजें लेकिन अगर कोई त्रुटि नहीं होती है, तो जारी रखें

मेरे पास एक शेल स्क्रिप्ट है जिसे मैं लॉन्च में चलाता हूं जो मेरे एमएएमपी MySQL इंस्टॉल का बैक अप लेता है। दुर्भाग्य से यदि एमएएमपी नहीं चल रहा है तो यह एक त्रुटि फेंकता है और इसे आंतरिक मेल में भेजता है। मैं किसी भी त्रुटि को अनदेखा करना चाहता हूं (/dev/null पर भेजा गया), लेकिन यदि जारी रखने के लिए कोई त्रुटि नहीं है, तो।

मैंने निम्नलिखित का प्रयास किया है, जो एमएएमपी चल रहा है जब सही ढंग से बैकअप बनाता है, लेकिन अगर यह नहीं चल रहा है तो मेल भेजता है (stderr):

#!/bin/bash
/Applications/MAMP/Library/bin/mysqldump --opt -u root -pPASSWORDHERE --host=localhost --all-databases > | gzip -9 > /Users/Paul/Dropbox/Development/Shared\ DBs/BACKUPS/all_databases_-`date "+%Y-%m-%d_%H.%M.%s"`.sql.gz

और मैंने यह भी कोशिश की:

#!/bin/bash
/Applications/MAMP/Library/bin/mysqldump --opt -u root -pPASSWORDHERE --host=localhost --all-databases 2> /dev/null 1> | gzip -9 > /Users/Paul/Dropbox/Development/Shared\ DBs/BACKUPS/all_databases_-`date "+%Y-%m-%d_%H.%M.%s"`.sql.gz

लेकिन यह कुछ भी नहीं करता है ...

अगर मुझे कोई त्रुटि है तो मुझे चाहिए:

  • Error to be sent to /dev/null
  • No Gzipped file to be created

अगर मुझे कोई त्रुटि नहीं है तो मुझे चाहिए:

  • एक Gzipped mysqldump बनाया जाना

क्या किसी को पता है कि मैं गलत कहां जा रहा हूं?

आपकी मदद के लिए अग्रिम धन्यवाद।

नीचे के अनुसार संपादित करें

अब मेरे पास है:

#!/bin/bash
# Create the backup name
BACKUP_NAME="/Users/Paul/Dropbox/Development/Shared DBs/BACKUPS/all_databases_-$(date "+%Y-%m-%d_%H.%M.%s").sql"
# Run mysqldump and create a raw backup
/Applications/MAMP/Library/bin/mysqldump --opt -u root -proot --host=localhost --all-databases 2> /dev/null > ${BACKUP_NAME}
# If no errors
if [$? = 0]
then
  # Create the gzip backup
  gzip -c9 ${BACKUP_NAME} > ${BACKUP_NAME}.gz
fi
# In any cases remove raw backup
rm -f ${BACKUP_NAME}

लेकिन जब कोई त्रुटि नहीं होती है तब भी यह फ़ाइल उत्पन्न नहीं करता है।

संपादित करें - समाप्त कोड

नीचे जेएमएल के अपडेट किए गए कोड का उपयोग करना (बहुत धन्यवाद), मुझे अभी भी त्रुटियां मिल रही थीं, लेकिन ऐसा इसलिए था क्योंकि मेरे पथ में एक जगह थी, इसलिए दो स्थानों पर उद्धरण चिह्नों की आवश्यकता थी।

अंतिम, कामकाजी कोड:

#!/bin/sh

# Create the backup name
BACKUP_NAME="/Users/Paul/Dropbox/Development/Shared DBs/BACKUPS/all_databases_-$(date +%Y-%m-%d_%H.%M.%s).sql"

# Run mysqldump and create a raw backup
/Applications/MAMP/Library/bin/mysqldump --opt --user=root --password=root --host=localhost --all-databases 2> /dev/null >${BACKUP_NAME}

# If no errors, create the gzip backup
test $? = 0 && gzip -c9 "${BACKUP_NAME}" > ${BACKUP_NAME}.gz

# In any cases remove raw backup
rm -f "${BACKUP_NAME}" 
2

1 उत्तर

विभाजन क्यों नहीं? कुछ इस तरह:

#!/bin/sh

# Create the backup name
BACKUP_NAME="/tmp/backup-$(date +%Y-%m-%d_%H.%M.%s).sql"

# Run mysqldump and create a raw backup
mysqldump --opt --user=root --password=root --host=localhost --all-databases 2>/dev/null >"${BACKUP_NAME}"

# If no errors, create the gzip backup
test $? = 0 && gzip -c9 "${BACKUP_NAME}" > "${BACKUP_NAME}.gz"

# In any cases remove raw backup
rm -f "${BACKUP_NAME}"
2
जोड़ा
कृपया इस उत्तर के अनुसार वर्तमान में मेरे पास मौजूद कोड के लिए अद्यतन प्रश्न देखें, लेकिन यह अभी भी काम नहीं करता है।
जोड़ा लेखक PaulSkinner, स्रोत
नहीं। त्रुटि मेल कहता है: /bin/sh: -c: line 0: मिलान '`' /bin/sh: -c: line 1: वाक्यविन्यास त्रुटि मिलान करते समय अप्रत्याशित EOF : फ़ाइल का अप्रत्याशित अंत
जोड़ा लेखक PaulSkinner, स्रोत
धीमे उत्तर के लिए खेद है, लेकिन यह मेरे लिए दो जगहों पर उद्धरण चिह्नों को शामिल करने के लिए मामूली संशोधन के साथ काम कर रहा है क्योंकि पथ में एक जगह है।
जोड़ा लेखक PaulSkinner, स्रोत
यदि आप rm पंक्ति पर टिप्पणी करते हैं, तो क्या कोई बैकअप फ़ाइल बनाई गई है?
जोड़ा लेखक jml, स्रोत
मैंने कोड संपादित किया है, यह मेरे लिए काम कर रहा है।
जोड़ा लेखक jml, स्रोत