मैं एक बहुत ही सरल बैश स्क्रिप्ट लिख रहा हूं जो किसी दिए गए निर्देशिका को टारता है, उसके आउटपुट को एन्क्रिप्ट करता है, और उसके बाद परिणामी फ़ाइल को कई छोटी फ़ाइलों में विभाजित करता है क्योंकि बैकअप मीडिया बड़ी फ़ाइलों का समर्थन नहीं करता है।बैश स्क्रिप्ट्स में कमांड के रूप में चर
मुझे बैश स्क्रिप्टिंग के साथ बहुत अधिक अनुभव नहीं है। मुझे विश्वास है कि पैरामीटर में रिक्त स्थान की अनुमति देने के लिए मुझे अपने चर को सही तरीके से उद्धृत करने में समस्याएं हैं। स्क्रिप्ट इस प्रकार है:
विभाजन: "foo/2009-04-27T14-32-04.backup" आ: ऐसा कोई फ़ाइल या निर्देशिका
#! /bin/bash
# This script tars the given directory, encrypts it, and transfers
# it to the given directory (likely a USB key).
if [ $# -ne 2 ]
then
echo "Usage: `basename $0` DIRECTORY BACKUP_DIRECTORY"
exit 1
fi
DIRECTORY=$1
BACKUP_DIRECTORY=$2
BACKUP_FILE="$BACKUP_DIRECTORY/`date +%Y-%m-%dT%H-%M-%S.backup`"
TAR_CMD="tar cv $DIRECTORY"
SPLIT_CMD="split -b 1024m - \"$BACKUP_FILE\""
ENCRYPT_CMD='openssl des3 -salt'
echo "$TAR_CMD | $ENCRYPT_CMD | $SPLIT_CMD"
$TAR_CMD | $ENCRYPT_CMD | $SPLIT_CMD
say "Done backing up"
इस आदेश चल रहा है के साथ विफल
मैं $BACKUP_FILE
के आसपास उद्धरणों को हटाकर इसे ठीक कर सकता हूं जहां मैंने $SPLIT_CMD
सेट किया था। लेकिन, अगर मेरे पास बैकअप निर्देशिका के नाम पर कोई स्थान है तो यह काम नहीं करता है। साथ ही, अगर मैं आउटपुट को "echo" कमांड से सीधे टर्मिनल में कॉपी और पेस्ट करता हूं तो यह ठीक काम करता है। स्पष्ट रूप से ऐसा कुछ है जो मुझे समझ में नहीं आता कि बैश चीजों से कैसे बच रहा है।
क्यों आप $ BACKUP_FILE SPLIT_CMD में एम्बेड हैं जब आप बस इसे डाल सकता है के बाद टी में $ SPLIT_CMD वह पाइपलाइन? –
वैसे मैं ऐसा कर सकता था, लेकिन उस समय मेरे आदेशों को रखने के लिए चर होने में वास्तव में बहुत अधिक बिंदु नहीं है और मैं इसे जूलियानो के उत्तर के रूप में भी विस्तारित कर सकता हूं। – wxs
http://mywiki.wooledge.org/BashFAQ/050 – tripleee