डैश फाइलें कैसे पढ़ें


15

मैं इसे कैसे डीलिमिट करने के अलावा टर्मिनल से डैश फ़ाइल पढ़ सकता हूं ./

उदाहरण के लिए - fileहम इसे पढ़ सकते हैं

cat ./-file_name

प्रश्न: क्या समान चीज़ को प्राप्त करने का एक वैकल्पिक तरीका है?


4
अनुशंसित तरीका वास्तव में ./उपसर्ग का उपयोग करना है । यह सबसे पोर्टेबल है (cf usenet युग की यूनिक्स एफएक्यू)
ओलिवियर दुलक

find . -name "-filename" | xargs catभेज देंगे ।/- पाइप के माध्यम से नाम बदलें। आपके (सरलीकृत?) मामले में गलती हुई है, लेकिन यह बड़ी निर्देशिकाओं / लिपियों में मदद कर सकता है।
वाल्टर ए

जवाबों:


11

उन आदेशों के लिए जिन्हें स्टड से इनपुट मिलता है, आप पुनर्निर्देशन का उपयोग कर सकते हैं:

cat <-file_name

फिर यह एक काम करता है :) तो मुझे 3 तरीके मिले हैं एक का उपयोग करके उन्हें पढ़ने के लिए। / दूसरे का उपयोग करके - और दूसरा उपयोग करके <, किसी भी एक ही काम करने के और तरीके ??
विधन

22

--विकल्पों के अंत को चिह्नित करने के लिए डबल का उपयोग करें:

cat -- -<FILENAME>

अन्य कार्यक्रम जैसे कि touch, rmया git checkoutइस सम्मेलन का भी पालन करें:

$ touch -- -file
$ ll
total 0
-rw-r--r-- 1 ja ja 0 Mar 10 13:13 -file
$ echo hi! >> -file
$ cat -- -file
hi!
$ rm -- -file
$ echo $?
0

चेतावनी: स्क्रिप्ट के --बाद हमेशा उपयोग करना अच्छा है rm। एक हमलावर --rfएक निर्देशिका में फ़ाइल रख सकता है और rm *इसे रन पैरामीटर के रूप में ले जाएगा। यह देखो:

$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch -- -rf
$ rm *
$ ll
total 0
-rw-r--r-- 1 ja ja 0 Mar 10 13:21 -rf

ओह, यह हमारा मतलब नहीं है, हम निर्देशिकाओं को हटाना नहीं चाहते। हमें इस्तेमाल करना चाहिए --:

$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch -- -rf
$ rm -- *
rm: cannot remove `dir': Is a directory
$ ll
total 4.0K
drwxr-xr-x 2 ja ja 4.0K Mar 10 13:22 dir

3
आप हर कार्यक्रम को लागू करने पर भरोसा नहीं कर सकते हैं --: कई करते हैं लेकिन सभी नहीं।
ग्लेन जैकमैन

2
वास्तव में? मैंने यह नहीं कहा कि सभी कार्यक्रम लागू होते हैं --, मैंने कहा कि कुछ ऐसा करें।
अरकाडियस डेराबसीक

1
@ विधन: मुझे किसी अन्य विकल्प की जानकारी नहीं है।
अरकाडियस डेराबसीक

1
@vidhan आप बिना किसी कारण के अपने जीवन को जटिल बना सकते हैं और ऐसा कुछ कर सकते हैं find . -name '-file_name' -exec cat {} \;लेकिन वास्तव में इसका कोई मतलब नहीं है।
terdon

2
यदि फ़ाइल का नाम -और कुछ नहीं है तो यह काम नहीं करता है? यह युद्ध में आया था: overthewire.org/wargames/bandit/bandit2.html
ThisClark

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