फ़ाइल नाम में रिक्त स्थान के साथ स्क्रिप्ट में परेशानी


11

मुझे एक स्क्रिप्ट मिली है जो scp की फाइल को रिमोट होस्ट से लोकल में वापस भेजती है। कभी-कभी फ़ाइल नामों में स्थान होते हैं। scp को इसके फ़ाइल नामों में स्थान पसंद नहीं है। किसी कारण से रिक्त स्थान को संभालने के मेरे प्रयासों के परिणामस्वरूप सही scp पथ नहीं है।

कोड:

PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH Me@10.1.10.33:/Users/Me/Desktop

का परिणाम

Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg

PATH को उद्धरणों "$PATH"में शामिल करना एक ही त्रुटि देता है।

बची हुई जगहों के लिए रिक्त स्थान की अदला-बदली भी काम नहीं कर रही है, हालाँकि जहाँ तक मुझे यह बताना चाहिए:

ESC_PATH=${PATH/' '/'\ '}

हालांकि बचा हुआ रास्ता छापना दिखाता है कि संपादित ने काम किया:

echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg

4
कृपया $PATHअपने स्वयं के चर के लिए उपयोग न करें , क्योंकि आपके टर्मिनल को इसकी आवश्यकता है।
बर्नहार्ड

जवाबों:


19

आपको घोषणा और उपयोग दोनों को उद्धृत करना चाहिए

path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" Me@10.1.10.33:/Users/Me/Desktop

यदि आप पहले उद्धरण नहीं करते हैं, $pathतो केवल पहला भाग होगा। यदि आप दूसरे को उद्धृत नहीं करते हैं, scpतो प्रत्येक अंतरिक्ष-पृथक भाग को एक तर्क के रूप में मानेंगे।

(मैं बदल दिया है $PATHकरने के लिए $pathक्योंकि $PATHएक महत्वपूर्ण आरक्षित चर रहा है और आप सामान्य उद्देश्यों के लिए उपयोग नहीं करना चाहिए।)


1
उत्तम! एक लाख @Matteo धन्यवाद। पता चलता है कि एक पूर्वनिर्मित स्थान भी था, जिसमें एक रिंच भी था।
माइल्स एल्डन

1

मैं ssh के साथ कुछ इसी तरह की कोशिश कर रहा था और इसके माध्यम से एक कमांड लाइन गुजर रहा था। जैसे

ssh <somehost> ls -l "$PATH"

मैंने पाया कि "$ PATH" को परिभाषित करने ने चाल नहीं चली - यह अभी भी त्रुटियों को फेंक दिया है। हालाँकि अगर मैं भागा

ssh <somehost> ls -l "\"$PATH"\"

यह काम किया। चाल को शेल से ssh कमांड में "" का अतिरिक्त सेट सुनिश्चित करना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.