আমি ব্যাশ স্ক্রিপ্টের মধ্যে শেষ কমান্ডটি চালানোর চেষ্টা করছি। history,tail,head,sed
কমান্ডগুলি আমার স্ক্রিপ্টের একটি পার্সার দৃষ্টিকোণ থেকে একটি নির্দিষ্ট লাইন উপস্থাপন করে এমন কিছু নিয়ে এটি করার একটি উপায় খুঁজে পেয়েছি যা সূক্ষ্ম হয়। তবে কিছু পরিস্থিতিতে আমি প্রত্যাশিত আউটপুটটি পাই না, উদাহরণস্বরূপ যখন একটি case
বিবৃতিতে কমান্ডটি সন্নিবেশ করা হয় :
এই পান্ডুলিপি:
#!/bin/bash
set -o history
date
last=$(echo `history |tail -n2 |head -n1` | sed 's/[0-9]* //')
echo "last command is [$last]"
case "1" in
"1")
date
last=$(echo `history |tail -n2 |head -n1` | sed 's/[0-9]* //')
echo "last command is [$last]"
;;
esac
আউটপুট:
Tue May 24 12:36:04 CEST 2011
last command is [date]
Tue May 24 12:36:04 CEST 2011
last command is [echo "last command is [$last]"]
[প্রশ্ন] বাশ স্ক্রিপ্টের মধ্যে এই কমান্ডটি কীভাবে / যেখানে বলা হয়েছে তা নির্বিশেষে কেউ কি আমাকে সর্বশেষ রান কমান্ড প্রতিধ্বনির উপায় খুঁজতে সাহায্য করতে পারে?
আমার উত্তর
আমার সহকর্মী SO'ers দ্বারা প্রচুর প্রশংসা করা সত্ত্বেও, আমি একটি run
ফাংশন লেখার পক্ষে বেছে নিয়েছি - যা তার সমস্ত পরামিতিগুলিকে একক কমান্ড হিসাবে চালায় এবং কমান্ডটি এবং এর ত্রুটি কোডটি ব্যর্থ হলে প্রদর্শন করে - নীচের সুবিধাগুলি সহ আমাকে
কেবল দরকার আমি যে কমান্ডগুলি পরীক্ষা করতে চাই তা run
প্রেন্ডেন্ড করুন যা এগুলি এক লাইনে রাখে এবং আমার স্ক্রিপ্টের সংক্ষিপ্ততার উপর প্রভাব ফেলবে না - যখনই
স্ক্রিপ্ট এই কমান্ডগুলির একটিতে ব্যর্থ হয়, তখন আমার স্ক্রিপ্টের শেষ আউটপুট লাইনটি একটি বার্তা যা স্পষ্টভাবে কোন কমান্ড প্রদর্শন করে এর প্রস্থান কোডের সাথে ব্যর্থ হয় যা ডিবাগিংকে আরও সহজ করে তোলে
উদাহরণ লিপি:
#!/bin/bash
die() { echo >&2 -e "\nERROR: $@\n"; exit 1; }
run() { "$@"; code=$?; [ $code -ne 0 ] && die "command [$*] failed with error code $code"; }
case "1" in
"1")
run ls /opt
run ls /wrong-dir
;;
esac
আউটপুট:
$ ./test.sh
apacheds google iptables
ls: cannot access /wrong-dir: No such file or directory
ERROR: command [ls /wrong-dir] failed with error code 2
আমি একাধিক যুক্তি, বাশ ভেরিয়েবল হিসাবে আর্গুমেন্ট, উদ্ধৃত আর্গুমেন্ট ... সহ বিভিন্ন কমান্ড পরীক্ষা করেছি এবং run
ফাংশনটি তাদের ভেঙে ফেলেনি। আমি এখনও অবধি একমাত্র ইস্যুটি পেয়েছি এটি প্রতিধ্বনি চালানো যা ব্রেক হয়ে যায় তবে আমি আমার ইকোগুলি যেভাবেই পরীক্ষা করার পরিকল্পনা করি না।
run()
সঠিকভাবে কাজ করে না যখন কোট ব্যবহার করা হয়, উদাহরণস্বরূপ এই ব্যর্থ হলে:run ssh-keygen -t rsa -C info@example.org -f ./id_rsa -N ""
।