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


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.