मेरी mysql पुनर्स्थापना स्क्रिप्ट में मैं इनपुट के लिए पहले बनाई गई mysqldump फ़ाइल का उपयोग करता हूं। यह फ़ाइल नाम एक तर्क के रूप में कमांड लाइन पर प्रदान किया जाता है और इसे gzipped नहीं किया जा सकता है या नहीं किया जा सकता है। मैं फ़ाइल को mysql स्टेटमेंट के इनपुट के रूप में उपयोग करना चाहता हूं लेकिन फ़ाइल को बदल / गनज़िप न करें, बस सामग्री पढ़ें।
मैं mysql कमांड के इनपुट के लिए निम्नलिखित कोड का उपयोग करता हूं (जो मुझे पसंद है):
mysql -u $user -p"$pass" $dbname <( [[ "${mysqldumpfile: -3}" = ".gz" ]] && gzip -d -c "${mysqldumpfile}" || cat "${mysqldumpfile}" )
तो mysql डंप फ़ाइल का नाम ".gz" में समाप्त होता है, फिर मैं stdout को गनज़िप करता हूं, अन्यथा मैं stdout करने के लिए बिल्ली करता हूं। या तो stdout को mysql कमांड में stdin के रूप में उपयोग किया जाता है।
क्या यह UUOC है? वहाँ बिल्ली का उपयोग नहीं करने के लिए एक रास्ता है?
क्या ऐसा करने का एक और तरीका है (एक पंक्ति में)? और स्पष्ट होने के लिए मैं एक if / if / check / statement में जांच नहीं करना चाहता और दो अलग-अलग mysql कमांड करता हूं। मुझे एक कमांड लाइन पसंद है जो दो अलग-अलग इनपुट का उपयोग कर सकती है।
संपादित करें:
जबसे zcat -f यदि डेटा संकुचित नहीं है, तो दोनों असंपीड़ित और बिल्ली या सिर्फ बिल्ली करेंगे, यह सबसे अच्छा उदाहरण नहीं है। मैं अभी भी जानना चाहूंगा कि क्या कोई और तरीका है <( test && do_this_command_as_input || cat this_is_the_input ) और बिल्ली का उपयोग नहीं करते।
और इससे पहले कि कोई इसका उल्लेख करे ... आप एक mysql कमांड लाइन का उपयोग करके इनपुट नहीं कर सकते <( )।