मेरे पास एक स्क्रिप्ट है जो प्रगति पट्टी के साथ एक सीपी बनाने के लिए स्ट्रेस, सीपी, अजीब और स्टेट का उपयोग करती है। यहाँ कोड का वह भाग है जहाँ वह cp कहता है:

    strace -q -ewrite cp -- `printf '%q ' $@` 2>&1 | awk {Lots of code here}

समस्या यह है कि, मैं रिक्त स्थान के साथ कुछ भी कॉपी नहीं कर सकता। मुझे इस स्क्रिप्ट को कैसे संशोधित करना चाहिए ताकि यह रिक्त स्थान के साथ काम करे? धन्यवाद

संपादित करें: यहाँ आउटपुट है:

matt: ~/tmp $ bash -x cp-progress "q" "file"
++ printf '%q ' q file
++ stat -c %s q
+ strace -q -ewrite cp -- q file
+ awk '{
        count += $NF
            if (count % 10 == 0) {
               percent = count / total_size * 100
               printf "%2d%% [", percent
               for (i=0;i<=percent / 2;i++)
                  printf "→"
               printf "→"

               printf "]\r"
            }
         }
         END { print "" }' total_size=5242880 count=0
100% [→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→]
matt: ~/tmp $ bash -x cp-progress "q" "file with spaces"
++ printf '%q ' q 'file with spaces'
+ strace -q -ewrite cp -- q 'file\' 'with\' spaces
++ stat -c %s q
+ awk '{
        count += $NF
            if (count % 10 == 0) {
               percent = count / total_size * 100
               printf "%2d%% [", percent
               for (i=0;i<=percent / 2;i++)
                  printf "→"
               printf "→"

               printf "]\r"
            }
         }
         END { print "" }' total_size=5242880 count=0
 0% [→→]

पहला वाला देखें? यह ठीक काम करता है, जो cp -- q file निष्पादित करता है। अब, अगला वाला, cp -- q 'file\' 'with\' spaces मैं इसे कैसे ठीक करूं?

2
Matt 30 जुलाई 2011, 00:39

1 उत्तर

सबसे बढ़िया उत्तर

"$@" का उपयोग करें

मैन बैश:

When  the expansion  occurs within double quotes, each parameter expands to a
separate word.  That is, "$@" is equivalent to "$1"  "$2"  ...

अपने मामले में, इस फॉर्म का प्रयोग करें:

strace -q -ewrite cp -- "$@" | ...
5
Paŭlo Ebermann 4 सितंबर 2011, 20:42
strace -q -ewrite cp -- "$@" | ... ?
 – 
Karoly Horvath
30 जुलाई 2011, 04:09