বাশ: [: অনেক যুক্তি?


8

আমি একটি ডিরেক্টরি তৈরি করার চেষ্টা করছি এবং cdএটিতে:

~ / .Bashrc এ:

function abc() {
  appname=$1
  appdir="$HOME/code/$appname"
  if [ mkdir $appdir -a cd $appdir ]; then
    echo Success
  else
    echo Failed to create and switch directory
  fi
}

আমি যখন বাশার্ক ( . ~/.bashrc) পুনরায় লোড করি তখন ত্রুটিটি পাই:

bash: [: too many arguments
Failed to create and switch directory

আমি কিভাবে এটা ঠিক করব? এবং [:ত্রুটি মানে কি?

পুনশ্চ. কেউ আমাকে "নন-ক্রিপ্টিক" বাশ স্ক্রিপ্টিং টিউটোরিয়ালের দিকে পরিচালিত করতে পারেন?


আমার ধারণা আপনার স্ক্রিপ্টে কিছু ভুল আছে, আপনি যদি সঠিক সিনট্যাক্স ব্যবহার করে শুরু করতে পারেন তবে। if <COMMANDS>; then <COMMANDS>; fi
karthick87

2
আমি জানি না এটি কেবল আমার কিনা ... তবে পিটফল 6 চেষ্টা করে দেখুন; শুনেছি এটি কয়েক জনকে পেয়ে যায়;) mywiki.wooledge.org/BashPitfalls
অ্যালেক্স স্টিভেনস

উত্তর:


12

আপনার স্ক্রিপ্টের প্রধান ত্রুটিটি হ'ল [কমান্ড, কমান্ডের সমতুল্য test, স্ট্রিং তুলনা, ফাইলের অস্তিত্ব এবং ইত্যাদির মতো শর্ত পরীক্ষা করতে ব্যবহৃত হয়।

প্রক্রিয়াগুলির প্রস্থান স্থিতি পরীক্ষা করতে আপনাকে ব্যবহার ifছাড়াই করতে হয় [, যাতে আপনার স্ক্রিপ্টটি হতে পারে

if mkdir "$appdir" && cd "$appdir"; then
  echo "Success"
else
  echo "Failed to create and switch directory"
fi

এই ব্যাখ্যা করা হয় ব্যাশ pitfalls: 9. যদি [, grep foo বিন্যাস myfile

বাশ বোঝার জন্য আপনাকে গ্রেগেট ব্যাশ গাইডের মধ্য দিয়ে যেতে পরামর্শ দিন ।


যে গাইড সত্যিই খুব ভাল! আপনাকে ধন্যবাদ, অন্যথায় আমি এখনও ম্যান পেজগুলি
বোঝাচ্ছি

আরেকটি উপায় হ'ল [-d "$ APPDIR"] থাকলে দিরের উপস্থিতি আছে কিনা তা যাচাই করা; তারপরে সিডি $ অ্যাপডিডির ফাই
এস 1 মেল

-3

একটি প্রোটোটাইপ হতে পারে:

  • আপনার ডেস্কটপে একটি ফাইল তৈরি করুন: touch newDirectory.sh
  • এক্সিকিউটেবল ফাইল করুন: chmod +x newDirectory.sh
  • ডেস্কটপে টার্মিনাল থেকে স্ক্রিপ্টটি কল করতে: ./newDirectory.sh anyName

/

#!/bin/bash
function abc() {
  appname=${1}
  appdir="$HOME/Desktop/$appname"
  if (( mkdir "${appdir}" )) ; then     
    cd "${appdir}"  
    echo "Success" 
  else   
    echo "Failed to create and switch directory" 
  fi
}
abc ${1}

ছোট্ট সুপারিশ: আপনি যদি নতুন হন তবে গণ্ডগোল করবেন না .bashrc:)


2
দুঃখিত, না। এই উত্তরটি নিয়ে বেশ কয়েকটি সমস্যা রয়েছে। 1) অনুপস্থিত a {। 2) এটি কখনও চালায় না mkdir। 3) আপনি cdপ্রস্থান স্থিতি পরীক্ষা করেন নি । 4) স্ক্রিপ্টগুলিতে এক্সটেনশন রাখবেন না। বিশেষত .shযখন এটি কোনও শ স্ক্রিপ্টও নয় not 5) এটি একটি স্ক্রিপ্টে রাখা ফাংশনটির উদ্দেশ্যকে পরাস্ত করে। mywiki.wooledge.org/BashGuide
গিরিহা

@ গিরিহা: আমার দোষ, {আমার সম্পাদনার আগে সেখানে ছিল।
এনজোটিব

উত্তর: ((এমকিডির "$ d অ্যাপডির}")) সমান 'এমকেডির "{{অ্যাপডির}" '( পিছনের টিক্সে দেখুন)
শিক্ষার্থী

স্ক্রিপ্টটি বশ -x newDirectory.sh ডিবাগ করুন এবং আপনি দেখতে পাবেন যে স্ক্রিপ্টটি ডিরেক্টরিতে সিডি হবে। আপনি যদি এর পরে আর কোনও প্রক্রিয়া চালাতে চান তবে এটি সম্পূর্ণ আলাদা ঘোড়া।
শিক্ষার্থী

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