क्या pwd में बैश एस्केप स्पेस होना संभव है?


21

मैं वर्तमान निर्देशिका को क्लिपबोर्ड पर कॉपी करना चाहता हूं, कुछ इस तरह pwd | pbcopy:। हालांकि, pwdअंतरिक्ष से नहीं बचता है, इसलिए "एप्लिकेशन सपोर्ट" में कुछ, उदाहरण के लिए, सही तरीके से कॉपी नहीं करता है। मुझे यह हमेशा याद नहीं रहता कि मामला ऐसा है, इसलिए मैं कुछ बोल सकता था। ITerm2 का उपयोग करना।

क्या सब कुछ से बचने के लिए बैश सेटिंग है? Spaces.app या के बारे में बहुत सारे प्रश्न / विषय खोजने में परेशानी हो रही है esc

वर्तमान:

$ pwd
/Library/Application Support/Google Earth/

पसंदीदा:

$ pwd
/Library/Application\ Support/Google\ Earth/

पहले से ही देखी गई पोस्ट: वर्तमान निर्देशिका पथ को क्लिपबोर्ड पर कॉपी करना और bash में रिक्त स्थान वाले नाम के साथ निर्देशिका में cd कैसे करें? , जो इसे संबोधित नहीं करते हैं। मैंने पूर्व में एक टिप्पणी की होगी, लेकिन मेरे पास विशेषाधिकार नहीं हैं।


1
मुझे संदेह है कि यह प्रतिलिपि सही है - आप जो चाहते हैं वह रिक्त स्थान से निपटने के लिए पेस्ट है - आप किस ऐप में पेस्ट कर रहे हैं?
मार्क

बड़ा सवाल है। आप जल्द ही टिप्पणी के लिए पर्याप्त प्रतिनिधि होगा। साइट पर आपका स्वागत है!
18

1
pwd | pbcopyटर्मिनल में मेरे लिए ठीक काम करता है। खोजक / संपादित करें / क्लिपबोर्ड दिखाएँ यह ठीक है की पुष्टि करता है।
lhf

@ lhf हाँ, टर्मिनल में जाँच करनी चाहिए थी, जो आपके बताये अनुसार काम करता है। ITerm2 में कोई भाग्य नहीं, यद्यपि। शायद मुझे वापस स्विच करना चाहिए ...
ग्रीनवार

यह आपके द्वारा चलाए जा रहे टर्मिनल एमुलेटर पर कैसे निर्भर हो सकता है? मैंने अभी परीक्षण किया है और pwd | pbcopyiTerm2 में ठीक काम करता है।
LHF

जवाबों:


13

यह कमांड रिक्त स्थान से ठीक से बच जाएगी:

printf "%q\n" "$(pwd)" | pbcopy

आप इतिहास के साथ कुछ का उपयोग करके इसे अलग कर सकते हैं जैसे cwdकि अगर आप एक अलग सीडब्ल्यूडी को फिर से परिभाषित करने में कोई आपत्ति नहीं करते हैं

alias cwd='printf "%q\n" "$(pwd)" | pbcopy'

यदि आप चाहते हैं कि यह pwd की तरह अधिक काम करे और बस बची हुई राह को प्रिंट करे तो पाइप को pbcopy पर लगाएँ।


Mac पर काम नहीं करता है
Macilias

1
मेरे मैक पर काम करता है।
जेसन स्विट

5
pwd | sed 's/ /\\ /g'

लेकिन मुझे यकीन नहीं है कि यह अंततः आपके मुद्दे को ठीक कर देगा। pbcopy स्टड पर प्राप्त होने वाली चीज़ की बिल्कुल नकल कर रहा है।


यह केवल रिक्त स्थान से बच जाएगा, जो लगभग पर्याप्त नहीं है, भले ही वह है जो ओपी एक उदाहरण के रूप में उपयोग किया जाता है।
ओल्ड प्रो

लेकिन यह ज्यादातर मामलों में काम करता है ग्लेन से उचित एक मेरे मैक पर काम नहीं किया, वहाँ कोई उत्पादन नहीं है
Macilias 7

जब आप किसी फ़ंक्शन की घोषणा करते हैं, तो आप इसे उपनाम के रूप में भी उपयोग कर सकते हैं: फ़ंक्शन एस्केपपीडब्ल्यूडी () {pwd | sed 's / / \\ / g'; } और उपनाम के लिए इसका उपयोग करें: उपनाम उवाच = 'एस्केपपीडब्ल्यूडी'
मैकिलियास

1

pwdआउटपुट से बच फ़ाइल पथ बनाने के लिए कोई अंतर्निहित तरीका नहीं है, क्योंकि यह आम तौर पर उपयोगी नहीं है।

इसका मतलब यह नहीं है कि जो कॉपी किया गया है उसमें बैकस्लैश जोड़ना pwdया pbcopyहोना। यदि आप पाठ फ़ाइल या वेब पोस्ट में पथ की प्रतिलिपि बनाना चाहते हैं, तो आप इसमें एक बैकस्लैश सम्मिलित नहीं करना चाहेंगे।

संभवतः आप जो करना चाहते हैं वह अलग उपनाम के रूप में बना है, जैसे qwd, वर्तमान निर्देशिका के उद्धृत रूप को प्रिंट करना, या बस के आउटपुट से बचना pbpaste, जो इसे दोहरे-उद्धरणों में डालना जितना आसान है:

bash-3.2$ pwd
/Users/user
bash-3.2$ cd test\ dir/untitled\ \"folder/
bash-3.2$ pwd
/Users/user/test dir/untitled "folder
bash-3.2$ pwd | pbcopy
bash-3.2$ echo "`pbpaste`"
/Users/user/test dir/untitled "folder
bash-3.2$ cd
bash-3.2$ pwd
/Users/user
bash-3.2$ cd `pbpaste`
bash: cd: /Users/user/test: No such file or directory
bash-3.2$ cd "`pbpaste`"
bash-3.2$ pwd
/Users/user/test dir/untitled "folder

ध्यान दें कि यह केवल रिक्त स्थान नहीं है जो भागने की आवश्यकता है। फॉरवर्ड और बैकवर्ड स्लैश, स्टार, प्रश्न चिह्न, एम्परसेंड, सेमी-कोलोन, और अन्य पात्रों को भी भागने की जरूरत है। उदाहरण के रूप में सबसे सुरक्षित डबल-कोट्स का उपयोग करना है, जो कि पथ को डबल-कोट्स में शामिल करने पर भी काम करेगा।

यदि आप इसके बारे में विकृत होना चाहते हैं, तो आप AppleScript को आपके लिए वर्तमान निर्देशिका को उद्धृत कर सकते हैं:

bash-3.2$ alias qwd="osascript -e 'return quoted form of POSIX path of (POSIX file \"./\" as alias)'"
bash-3.2$ qwd
'/Users/user/test dir/untitled "folder'

अन्यथा मैं ज्यादातर ग्लेन के साथ सहमत हूं, सिवाय इसके, जैसा कि ऊपर उद्धृत करता हूं, मैं qwdसामान्य रूप से हस्तक्षेप नहीं करने के लिए उद्धृत रूप को उपनाम दूंगा pwd:

alias qwd='printf "%q\n" "$(pwd)"'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.