ফাইল রয়েছে কিনা তা পরীক্ষা করার জন্য একক কমান্ড, এবং স্টাডআউটে (কাস্টম) বার্তা প্রিন্ট করবেন?


18

আশা করি এটি নোট করা ঠিক আছে, এখন আমি এটির মুখোমুখি হয়েছি:

আমি ইতিমধ্যে সচেতন যে কেউ test( [) কমান্ডটি ব্যবহার করে ফাইল অস্তিত্বের জন্য পরীক্ষা করতে পারে :

$ touch exists.file
$ if [ -f exists.file ] ; then echo "yes" ; else echo "no" ; fi
yes
$ if [ -f noexists.file ] ; then echo "yes" ; else echo "no" ; fi
no

... তবে এটি সেখানে টাইপ করা কিছুটা :)সুতরাং, আমি যদি সেখানে কোনও "ডিফল্ট" একক কমান্ড থাকি, তবে সেগুলি ফাইলের অস্তিত্বের ফলাফলটি ফিরিয়ে দেবে stdout?

আমি testপ্রস্থান স্থিতি দিয়েও ব্যবহার করতে পারি $?:

$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1

... তবে এটি এখনও দুটি কমান্ড - এবং যুক্তিটিও "বিপরীত" (সাফল্যের জন্য 0, এবং ব্যর্থতার জন্য ননজারো)।

আমি জিজ্ঞাসার কারণটি হ'ল আমাকে ফাইল অস্তিত্বের জন্য পরীক্ষা করা দরকার gnuplot, যার " system("command")স্ট্রাউড থেকে ফলাফলের চরিত্রের প্রবাহটি স্ট্রিং হিসাবে ফিরিয়ে দেয় "; ইন gnuplotআমি সরাসরি করতে পারি:

gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes

সুতরাং আমি মূলত এর মতো কিছু লিখতে সক্ষম হতে চাই (ছদ্ম):

gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists)  { print "yes" } else { print "no" }
yes

... দুর্ভাগ্যক্রমে, আমি সরাসরি testএবং এর মাধ্যমে এটি ব্যবহার করতে পারি না $?:

gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists)  { print "yes" } else { print "no" }
no

... আমাকে যুক্তিটি উল্টাতে হবে।

সুতরাং, আমাকে মূলত একটি কাস্টম স্ক্রিপ্ট সমাধান (বা ওয়ান-লাইনার হিসাবে একটি স্ক্রিপ্ট ইনলাইন লিখতে হবে) নিয়ে আসতে হবে ... এবং আমি ভেবেছিলাম, যদি ইতিমধ্যে 0 বা 1 মুদ্রণ করতে পারে এমন কোনও ডিফল্ট কমান্ড থাকে (বা ফাইলের অস্তিত্বের জন্য স্টাডআউট করার জন্য একটি কাস্টম বার্তা), তবে আমাকে এটি করতে হবে না :)

(দ্রষ্টব্য যে lsকোনও প্রার্থী হতে পারেন, তবে এটি স্টাডআউট আউটপুটটি অনেক ভারবসজ; এবং যদি আমি এটি এড়াতে চাই তবে আমাকে সমস্ত আউটপুট দমন করতে হবে এবং আবার বিদ্যমান অবস্থায় ফিরে আসতে হবে)

$ ls exists.file 1>/dev/null 2>/dev/null ; echo $? 
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $? 
2

... তবে এটি আবার দুটি কমান্ড (এবং আরও টাইপিং), এবং "বিপরীত" যুক্তি ...)

সুতরাং, লিনাক্সে এটি করতে পারে এমন একটি ডিফল্ট কমান্ড রয়েছে?


2
কীভাবে ( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"?
ইরুবার

উত্তর:


9

আপনার প্রস্থান করার স্থিতিটি বিপরীত হওয়া দরকার বলে মনে হচ্ছে, যাতে আপনি এটি করতে পারেন:

system("[ ! -e file ]; echo $?")

বা:

system("[ -e file ]; echo $((!$?))")

(নোট যে -fজন্য ফাইলটি বিদ্যমান এবং একটি নিয়মিত ফাইল )।


5

এই একক ব্যাশ কমান্ডটি ব্যবহার করুন:

 [ -f /home/user/file_name ]

[]সাফল্যের পরীক্ষা এবং আয় 0 সঞ্চালন


3
উভয় ক্ষেত্রে - CentOS
উভচর

1
ম্যাকোস-এ দুর্দান্ত কাজ করে।
জোশুয়া পিন্টার

1
আপনার সাথে শর্তসাপেক্ষে কমান্ড চালানোর জন্য এই ব্যবহার করতে পারেন &&এবং ||: অপারেটার [ -f /home/user/file_name ] || echo "File not present"এছাড়াও[ -f /home/user/file_name ] && echo "File is present"
charlesreid1

1
@ Charlesreid1 এর একজন কাজ করে, ধন্যবাদ!
মার্টা কারাস

1

"যুক্তি উল্টানো" সম্পর্কে কী:

file_exists = 1-system("test -f exists.file; echo $?")

-1

এইটা কাজ করে:

pwsh -c Test-Path /etc/passwd

... যদি আপনি পাওয়ারশেল ইনস্টল করেন। এটি "সত্য" স্ট্রিংটি যদি पथটি উপস্থিত থাকে তবে, না থাকলে "মিথ্যা" দেয়। (আমি কি এই উত্তরের জন্য "ব্যঙ্গাত্মকভাবে অপ্রয়োজনীয়" পয়েন্টগুলি পাই?)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.