সবাই কেমন আছেন! এই নিবন্ধে আমরা কমান্ড লাইনটি ভালভাবে দেখব (এটি CLI, কনসোল, টার্মিনাল বা শেল নামেও পরিচিত)।
ডেভেলপার হিসেবে এবং সাধারণভাবে কম্পিউটার ব্যবহারকারী হিসেবে আমাদের কাছে থাকা সবচেয়ে কার্যকর এবং কার্যকরী টুলগুলির মধ্যে একটি কমান্ড লাইন। কিন্তু আপনি যখন শুরু করছেন তখন এটি ব্যবহার করা কিছুটা অপ্রতিরোধ্য এবং জটিল মনে হতে পারে।
এই নিবন্ধে আমি কমান্ড লাইন ইন্টারফেস তৈরির অংশগুলি এবং এটি কীভাবে কাজ করে তার মূল বিষয়গুলি ব্যাখ্যা করার জন্য আমার যথাসাধ্য চেষ্টা করব, যাতে আপনি আপনার দৈনন্দিন কাজের জন্য এটি ব্যবহার শুরু করতে পারেন।
চলো যাই! =D
বিষয়বস্তুর সারণী
- কনসোল, টার্মিনাল, কমান্ড লাইন (CLI) এবং Shell
- এর মধ্যে পার্থক্য
- কনসোল
- টার্মিনাল
- শেল
- কমান্ড লাইন (CLI)
- কেন আমি টার্মিনাল ব্যবহার করার বিষয়ে চিন্তা করব?
- বিভিন্ন ধরনের শেল
- একটু ইতিহাস - Posix
- কিভাবে বুঝব আমি কোন শেল চালাচ্ছি?
- কোন শেল ভাল?
- কাস্টমাইজেশন সম্পর্কে একটি মন্তব্য
- ব্যবহারের জন্য সবচেয়ে সাধারণ এবং দরকারী কমান্ড
- গিট কমান্ড
- আমাদের প্রথম স্ক্রিপ্ট
- রাউন্ড আপ
কনসোল, কমান্ড লাইন (CLI), টার্মিনাল এবং শেলের মধ্যে পার্থক্য
আমি মনে করি শুরু করার জন্য একটি ভাল জায়গা হল কমান্ড লাইনটি ঠিক কী তা জানা৷
৷এটি উল্লেখ করার সময়, আপনি টার্মিনাল, কনসোল, কমান্ড লাইন, CLI এবং শেল শব্দগুলি শুনে থাকতে পারেন। লোকেরা প্রায়শই এই শব্দগুলিকে বিনিময়যোগ্যভাবে ব্যবহার করে কিন্তু সত্য হল তারা আসলে ভিন্ন জিনিস।
প্রত্যেককে আলাদা করা অগত্যা গুরুত্বপূর্ণ জ্ঞান নয়, তবে এটি জিনিসগুলিকে স্পষ্ট করতে সাহায্য করবে। তাই সংক্ষেপে প্রতিটি ব্যাখ্যা করা যাক.
কনসোল:
৷কনসোল হল ফিজিকাল ডিভাইস যা আপনাকে কম্পিউটারের সাথে ইন্টারঅ্যাক্ট করতে দেয়।
সরল ইংরেজিতে, এটি আপনার কম্পিউটারের স্ক্রীন, কীবোর্ড এবং মাউস। একজন ব্যবহারকারী হিসাবে, আপনি আপনার কম্পিউটারের সাথে এর মাধ্যমে ইন্টারঅ্যাক্ট করেন আপনার কনসোল।
টার্মিনাল:
একটি টার্মিনাল একটি পাঠ্য ইনপুট এবং আউটপুট পরিবেশ। এটি একটি প্রোগ্রাম যেটি একটি র্যাপার হিসেবে কাজ করে এবং কম্পিউটার প্রসেস করে এমন কমান্ড লিখতে দেয়।
আবার সরল ইংরেজিতে, এটি হল "উইন্ডো" যেখানে আপনি প্রকৃত কমান্ডগুলি লিখবেন যা আপনার কম্পিউটার প্রক্রিয়া করবে৷
মনে রাখবেন টার্মিনাল একটি প্রোগ্রাম, ঠিক অন্য যে কোন মত. এবং যেকোনো প্রোগ্রামের মতো, আপনি এটি ইনস্টল করতে পারেন এবং আপনার ইচ্ছামত আনইনস্টল করতে পারেন। আপনার কম্পিউটারে অনেক টার্মিনাল ইনস্টল করাও সম্ভব এবং আপনি যখন খুশি তখনই চালাতে পারেন৷
সমস্ত অপারেটিং সিস্টেমে একটি ডিফল্ট টার্মিনাল ইনস্টল করা হয়, তবে সেখানে বেছে নেওয়ার জন্য অনেকগুলি বিকল্প রয়েছে, প্রতিটির নিজস্ব কার্যকারিতা এবং বৈশিষ্ট্য রয়েছে৷
শেল:
একটি শেল হল একটি প্রোগ্রাম যেটি কমান্ড-লাইন ইন্টারপ্রেটার হিসেবে কাজ করে। এটি কমান্ড প্রক্রিয়া করে এবং ফলাফল বের করে . এটি ব্যবহারকারীর দ্বারা প্রবেশ করা কমান্ডগুলিকে ব্যাখ্যা করে এবং প্রক্রিয়া করে৷
টার্মিনালের মতোই, শেল হল এমন একটি প্রোগ্রাম যা ডিফল্টরূপে সমস্ত অপারেটিং সিস্টেমে আসে, তবে ব্যবহারকারী দ্বারা ইনস্টল এবং আনইনস্টলও করা যায়৷
বিভিন্ন শেল বিভিন্ন সিনট্যাক্স এবং বৈশিষ্ট্যের সাথে আসে। আপনার কম্পিউটারে অনেকগুলি শেল ইনস্টল করাও সম্ভব এবং আপনি যখনই চান প্রতিটি চালাতে পারেন৷
বেশিরভাগ লিনাক্স এবং ম্যাক অপারেটিং সিস্টেমে ডিফল্ট শেল হল ব্যাশ। উইন্ডোজে থাকাকালীন এটি পাওয়ারশেল। শেলগুলির আরও কিছু সাধারণ উদাহরণ হল Zsh এবং মাছ।
শেলগুলি প্রোগ্রামিং ভাষা হিসাবেও কাজ করে , এই অর্থে যে তাদের সাথে আমরা স্ক্রিপ্ট তৈরি করতে পারি আমাদের কম্পিউটারকে একটি নির্দিষ্ট কাজ চালানোর জন্য। স্ক্রিপ্টগুলি একটি সিরিজের নির্দেশাবলী (কমান্ড) ছাড়া আর কিছুই নয় যা আমরা একটি ফাইলে সংরক্ষণ করতে পারি এবং পরে যখনই আমরা চাই তখন কার্যকর করতে পারি৷
আমরা এই নিবন্ধে পরে স্ক্রিপ্টগুলির দিকে নজর দেব। আপাতত মনে রাখবেন যে শেল হল সেই প্রোগ্রাম যা আপনার কম্পিউটার আপনার কমান্ডগুলিকে "বুঝতে" এবং কার্যকর করতে ব্যবহার করে এবং আপনি এটি প্রোগ্রামের কাজগুলিতেও ব্যবহার করতে পারেন৷
এছাড়াও মনে রাখবেন যে টার্মিনাল হল সেই প্রোগ্রাম যেখানে শেল চলবে। তবে উভয় প্রোগ্রামই স্বাধীন। তার মানে, আমি যেকোনো টার্মিনালে যে কোনো শেল চালাতে পারি। সেই অর্থে উভয় প্রোগ্রামের মধ্যে কোন নির্ভরতা নেই।
কমান্ড লাইন বা CLI (কমান্ড লাইন ইন্টারফেস):
CLI হল সেই ইন্টারফেস যেখানে আমরা কম্পিউটারকে প্রক্রিয়া করার জন্য কমান্ড লিখি। আবার সরল ইংরেজিতে, এটি সেই স্থান যেখানে আপনি কমান্ডগুলি প্রবেশ করান কম্পিউটার প্রক্রিয়া করবে৷
এটি কার্যত টার্মিনালের মতোই এবং আমার মতে এই পদগুলি একে অপরের সাথে ব্যবহার করা যেতে পারে৷
এখানে উল্লেখ করা একটি আকর্ষণীয় বিষয় হল যে বেশিরভাগ অপারেটিং সিস্টেমের দুটি ভিন্ন ধরনের ইন্টারফেস থাকে:
- CLI , যা কম্পিউটারের কার্য সম্পাদনের জন্য ইনপুট হিসাবে কমান্ড গ্রহণ করে।
- অন্যটি হল GUI (গ্রাফিকাল ইউজার ইন্টারফেস), যাতে ব্যবহারকারী স্ক্রিনে জিনিসগুলি দেখতে পারে এবং সেগুলিতে ক্লিক করতে পারে এবং কম্পিউটার সংশ্লিষ্ট কাজটি সম্পাদন করে সেই ইভেন্টগুলিতে প্রতিক্রিয়া জানাবে৷
আমি কেন টার্মিনাল ব্যবহার করার বিষয়েও চিন্তা করব?
আমরা শুধু উল্লেখ করেছি যে বেশিরভাগ অপারেটিং সিস্টেম একটি GUI এর সাথে আসে। সুতরাং আমরা যদি স্ক্রিনে জিনিসগুলি দেখতে পারি এবং আমরা যা চাই তা করতে চারপাশে ক্লিক করতে পারি, তাহলে আপনি ভাবতে পারেন কেন এই জটিল টার্মিনাল/cli/শেল জিনিসটি শিখতে হবে?
প্রথম কারণ হল অনেক কাজের জন্য, এটা শুধু আরো দক্ষ . আমরা এক সেকেন্ডের মধ্যে কিছু উদাহরণ দেখতে পাব, কিন্তু এমন অনেক কাজ আছে যেখানে একটি GUI-এর জন্য বিভিন্ন উইন্ডোর চারপাশে অনেক ক্লিকের প্রয়োজন হবে। কিন্তু CLI-তে এই কাজগুলো একক কমান্ডের মাধ্যমে করা যেতে পারে।
এই অর্থে, কমান্ড লাইনের সাথে আরামদায়ক হওয়া আপনাকে সময় বাঁচাতে এবং আপনার কাজগুলি দ্রুত সম্পাদন করতে সক্ষম হবে৷
দ্বিতীয় কারণ হল কমান্ড ব্যবহার করে আপনি সহজেই কাজগুলি স্বয়ংক্রিয়ভাবে করতে পারেন . পূর্বে উল্লিখিত হিসাবে, আমরা আমাদের শেল দিয়ে স্ক্রিপ্ট তৈরি করতে পারি এবং পরে যখনই চাই তখন সেই স্ক্রিপ্টগুলি কার্যকর করতে পারি। আমরা বারবার করতে চাই না এমন পুনরাবৃত্তিমূলক কাজগুলি মোকাবেলা করার সময় এটি অবিশ্বাস্যভাবে কার্যকর।
শুধু কিছু উদাহরণ দেওয়ার জন্য, আমরা এমন একটি স্ক্রিপ্ট তৈরি করতে পারি যা আমাদের জন্য একটি নতুন অনলাইন রেপো তৈরি করে, বা আমাদের জন্য একটি ক্লাউড প্রদানকারীতে একটি নির্দিষ্ট পরিকাঠামো তৈরি করে, অথবা এটি প্রতি ঘন্টায় আমাদের স্ক্রীন ওয়ালপেপার পরিবর্তন করার মতো একটি সহজ কাজ সম্পাদন করে।
স্ক্রিপ্টিং পুনরাবৃত্তিমূলক কাজগুলির সাথে সময় বাঁচানোর একটি দুর্দান্ত উপায়৷
তৃতীয় কারণ হল যে কখনও কখনও CLI হবে একমাত্র উপায় যেখানে আমরা একটি কম্পিউটারের সাথে যোগাযোগ করতে সক্ষম হব। যেমন ধরুন, যখন আপনাকে একটি ক্লাউড প্ল্যাটফর্ম সার্ভারের সাথে ইন্টারঅ্যাক্ট করতে হবে। এই বেশিরভাগ ক্ষেত্রে, আপনার কাছে একটি GUI উপলব্ধ থাকবে না, শুধুমাত্র একটি CLI কমান্ড চালানোর জন্য।
তাই CLI এর সাথে স্বাচ্ছন্দ্য বোধ করলে আপনি সব সময়ে কম্পিউটারের সাথে যোগাযোগ করতে পারবেন।
শেষ কারণ হল এটি দেখতে শীতল এবং এটি মজাদার। আপনি মুভি হ্যাকারদের তাদের কম্পিউটারের চারপাশে ক্লিক করতে দেখেন না, তাই না?;)
বিভিন্ন ধরনের শেল
আপনি আপনার টার্মিনালে চালাতে পারেন এমন আসল কমান্ডগুলিতে ডাইভ করার আগে, আমি মনে করি সেখানে বিভিন্ন ধরণের শেলগুলি সনাক্ত করা এবং আপনি বর্তমানে কোন শেল চালাচ্ছেন তা কীভাবে সনাক্ত করা যায় তা গুরুত্বপূর্ণ৷
বিভিন্ন শেল বিভিন্ন সিনট্যাক্স এবং বিভিন্ন বৈশিষ্ট্য সহ আসে, তাই ঠিক কোন কমান্ডটি প্রবেশ করতে হবে তা জানতে, আপনাকে প্রথমে জানতে হবে আপনি কোন শেলটি চালাচ্ছেন৷
একটু ইতিহাস – Posix
শেলগুলির জন্য, Posix নামে একটি সাধারণ মান আছে .
Posix শেলগুলির জন্য একইভাবে কাজ করে যেভাবে ECMAScript জাভাস্ক্রিপ্টের জন্য কাজ করে। এটি একটি স্ট্যান্ডার্ড যা নির্দিষ্ট বৈশিষ্ট্য এবং বৈশিষ্ট্যগুলি নির্দেশ করে যা সমস্ত শেলকে মেনে চলতে হবে৷
এই মান 1980-এর দশকে স্থাপিত হয়েছিল এবং বেশিরভাগ বর্তমান শেলগুলি সেই মান অনুযায়ী তৈরি করা হয়েছিল। এই কারণেই বেশিরভাগ শেল একই সিনট্যাক্স এবং একই বৈশিষ্ট্যগুলি ভাগ করে।
আমি কীভাবে জানব যে আমি কোন শেল চালাচ্ছি?
আপনি বর্তমানে কোন শেল চালাচ্ছেন তা জানতে, শুধু আপনার টার্মিনাল খুলুন এবং echo $0
লিখুন . এটি বর্তমান চলমান প্রোগ্রামের নাম মুদ্রণ করবে, যা এই ক্ষেত্রে প্রকৃত শেল।
কোন শেল ভালো?
বেশিরভাগ শেলগুলির মধ্যে খুব বেশি পার্থক্য নেই। যেহেতু তাদের বেশিরভাগই একই মান মেনে চলে, আপনি দেখতে পাবেন যে তাদের বেশিরভাগই একইভাবে কাজ করে৷
কিছু সামান্য পার্থক্য আছে যা আপনি জানতে চাইতে পারেন, যদিও:
- উল্লিখিত হিসাবে, ব্যাশ এটি সর্বাধিক ব্যবহৃত হয় এবং ম্যাক এবং লিনাক্সে ডিফল্টরূপে ইনস্টল করা হয়৷ ৷
- Zsh এটি Bash-এর মতোই, তবে এটি এর পরে তৈরি করা হয়েছিল এবং এটিতে কিছু চমৎকার উন্নতি নিয়ে আসে। আপনি যদি এর পার্থক্য সম্পর্কে আরও বিশদ জানতে চান তবে এখানে এটি সম্পর্কে একটি দুর্দান্ত নিবন্ধ রয়েছে৷
- মাছ আরেকটি সাধারণভাবে ব্যবহৃত শেল যা কিছু চমৎকার অন্তর্নির্মিত বৈশিষ্ট্য এবং কনফিগারেশন যেমন স্বয়ংসম্পূর্ণতা এবং সিনট্যাক্স হাইলাইটিং সহ আসে। মাছ সম্পর্কে জিনিস হল যে এটি Posix অভিযোগ নয়, যখন Bash এবং Zsh হয়। এর মানে হল যে কিছু কমান্ড আপনি Bash এবং Zsh এ চালাতে সক্ষম হবেন তা Fish এবং এর বিপরীতে চলবে না। এটি Bash এবং Zsh-এর তুলনায় বেশিরভাগ কম্পিউটারের সাথে ফিশ স্ক্রিপ্টিং কম সামঞ্জস্যপূর্ণ করে তোলে।
- এছাড়াও অন্যান্য শেল আছে যেমন অ্যাশ অথবা ড্যাশ (নামকরণ সবকিছুকে আরও বিভ্রান্তিকর করে তোলে, আমি জানি...) যেগুলি পসিক্স শেলগুলির স্ট্রাইপ-ডাউন সংস্করণ। এর মানে তারা শুধুমাত্র Posix-এ প্রয়োজনীয় বৈশিষ্ট্যগুলি অফার করে এবং অন্য কিছু নয়। যখন Bash এবং Zsh আরো বৈশিষ্ট্য যোগ করুন পসিক্সের যা প্রয়োজন তার চেয়ে।
শেলগুলি আরও বৈশিষ্ট্য যুক্ত করে তাদের সাথে যোগাযোগ করা সহজ এবং বন্ধুত্বপূর্ণ করে, কিন্তু স্ক্রিপ্ট এবং কমান্ডগুলি চালানোর জন্য ধীরগতির করে৷
তাই একটি সাধারণ অভ্যাস হল সাধারণ ইন্টারঅ্যাকশনের জন্য ব্যাশ বা Zsh-এর মতো এই "বর্ধিত" শেলগুলি এবং স্ক্রিপ্টগুলি চালানোর জন্য অ্যাশ বা ড্যাশের মতো একটি "স্ট্রিপড" শেল ব্যবহার করা।
আমরা যখন পরে স্ক্রিপ্টিং করতে যাব, তখন আমরা দেখব কিভাবে আমরা নির্ধারণ করতে পারি কোন শেলটি একটি প্রদত্ত স্ক্রিপ্ট কার্যকর করবে।
আপনি যদি এই শেলগুলির মধ্যে আরও বিশদ তুলনা করতে আগ্রহী হন তবে এখানে একটি ভিডিও রয়েছে যা এটি সত্যিই ভালভাবে ব্যাখ্যা করে:
যদি একটি শেল সুপারিশ করতে হয়, আমি bash সুপারিশ করব কারণ এটি সবচেয়ে আদর্শ এবং সাধারণভাবে ব্যবহৃত একটি। এর মানে হল আপনি আপনার জ্ঞানকে বেশিরভাগ পরিবেশে অনুবাদ করতে সক্ষম হবেন৷
৷কিন্তু আবার, সত্য হল বেশিরভাগ শেলগুলির মধ্যে খুব বেশি পার্থক্য নেই। তাই যেকোনো ক্ষেত্রে আপনি কয়েকটি চেষ্টা করে দেখতে পারেন কোনটি আপনার সবচেয়ে ভালো লাগে।;)
কাস্টমাইজেশন সম্পর্কে একটি মন্তব্য
আমি শুধু উল্লেখ করেছি যে ফিশ বিল্ট-ইন কনফিগারেশনের সাথে আসে যেমন স্বয়ংসম্পূর্ণতা এবং সিনট্যাক্স হাইলাইটিং। এটি ফিশ-এ বিল্ট-ইন আসে, তবে Bash বা Zsh-এ আপনি এই বৈশিষ্ট্যগুলিও কনফিগার করতে পারেন।
বিন্দু হল যে শেলগুলি কাস্টমাইজযোগ্য। আপনি প্রোগ্রামটি কীভাবে কাজ করে, আপনার কাছে কী কমান্ড উপলব্ধ আছে, আপনার প্রম্পট কী তথ্য দেখায় এবং আরও অনেক কিছু সম্পাদনা করতে পারেন৷
আমরা এখানে কাস্টমাইজেশন বিকল্পগুলি বিস্তারিতভাবে দেখতে পাব না, তবে জেনে রাখুন যে আপনি যখন আপনার কম্পিউটারে একটি শেল ইনস্টল করবেন তখন আপনার সিস্টেমে নির্দিষ্ট ফাইল তৈরি হবে। পরবর্তীতে আপনি আপনার প্রোগ্রাম কাস্টমাইজ করতে সেই ফাইলগুলি সম্পাদনা করতে পারেন৷
এছাড়াও, অনলাইনে অনেক প্লাগইন উপলব্ধ রয়েছে যা আপনাকে আপনার শেলকে একটি সহজ উপায়ে কাস্টমাইজ করার অনুমতি দেয়। আপনি কেবল সেগুলি ইনস্টল করুন এবং প্লাগইন অফার করে এমন বৈশিষ্ট্যগুলি পান৷ কিছু উদাহরণ হল OhMyZsh এবং Starship।
এই কাস্টমাইজেশন বিকল্পগুলি টার্মিনালগুলির জন্যও সত্য৷
৷তাই শুধুমাত্র আপনার কাছে বেছে নেওয়ার জন্য অনেক শেল এবং টার্মিনাল বিকল্প নেই – আপনার কাছে প্রতিটি শেল এবং টার্মিনালের জন্য অনেকগুলি কনফিগারেশন বিকল্প রয়েছে৷
আপনি যদি শুরু করেন তবে এই সমস্ত তথ্য কিছুটা অপ্রতিরোধ্য বোধ করতে পারে। তবে শুধু জেনে রাখুন যে অনেকগুলি বিকল্প উপলব্ধ রয়েছে এবং প্রতিটি বিকল্প কাস্টমাইজ করা যেতে পারে। এটাই।
ব্যবহারের জন্য সবচেয়ে সাধারণ এবং দরকারী কমান্ড
এখন যেহেতু আমাদের কাছে CLI কীভাবে কাজ করে তার একটি ভিত্তি আছে, আসুন সবচেয়ে দরকারী কমান্ডগুলিতে ডুব দেওয়া যাক যা আপনি আপনার দৈনন্দিন কাজের জন্য ব্যবহার করা শুরু করতে পারেন৷
মনে রাখবেন যে এই উদাহরণগুলি আমার বর্তমান কনফিগারেশনের উপর ভিত্তি করে হবে (একটি লিনাক্স ওএসে ব্যাশ)। তবে বেশিরভাগ কমান্ড যেভাবেই হোক বেশিরভাগ কনফিগারেশনে প্রযোজ্য হওয়া উচিত।
- ইকো আমরা তা পাস করি না কেন টার্মিনালে প্রিন্ট করে।
echo Hello freeCodeCamp! // Output: Hello freeCodeCamp!
- pwd প্রিন্ট ওয়ার্কিং ডিরেক্টরির জন্য দাঁড়ায় এবং এটি কম্পিউটারে আমরা বর্তমানে যে "স্থান" বা ডিরেক্টরিতে আছি তা প্রিন্ট করে৷
pwd // Output: /home/German
- ls আপনি বর্তমানে যে ডিরেক্টরিতে আছেন তার বিষয়বস্তু আপনাকে উপস্থাপন করে। এটি আপনাকে ফাইল এবং আপনার বর্তমান ডিরেক্টরিতে থাকা অন্যান্য ডিরেক্টরি উভয়ের সাথেই উপস্থাপন করবে।
উদাহরণস্বরূপ, এখানে আমি একটি প্রতিক্রিয়া প্রকল্প ডিরেক্টরিতে আছি যা আমি সম্প্রতি কাজ করছি:
ls // Output:
node_modules package.json package-lock.json public README.md src
যদি আপনি এই কমান্ডটি পাস করেন তাহলে পতাকা বা প্যারেমিটার -a
এটি আপনাকে লুকানো ফাইল বা ডিরেক্টরিও দেখাবে। যেমন .git
অথবা .gitignore
ফাইল
ls -a // Output:
. .env .gitignore package.json public src
.. .git node_modules package-lock.json README.md
- cd পরিবর্তন ডিরেক্টরির জন্য সংক্ষিপ্ত এবং এটি আপনাকে আপনার বর্তমান ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে নিয়ে যাবে।
আমার হোম ডিরেক্টরিতে থাকাকালীন, আমি cd Desktop
লিখতে পারি এবং এটি আমাকে ডেস্কটপ ডিরেক্টরিতে নিয়ে যাবে।
আমি যদি একটি ডিরেক্টরিতে যেতে চাই, মানে বর্তমান ডিরেক্টরি রয়েছে এমন ডিরেক্টরিতে যান, আমি cd ..
লিখতে পারি।
আপনি cd
লিখলে একা, এটি আপনাকে সরাসরি আপনার হোম ডিরেক্টরিতে নিয়ে যাবে৷
- mkdir মেক ডিরেক্টরির জন্য দাঁড়ায় এবং এটি আপনার জন্য একটি নতুন ডিরেক্টরি তৈরি করবে। আপনাকে ডিরেক্টরি নামের প্যারামিটার কমান্ডটি পাস করতে হবে।
আমি যদি "টেস্ট" নামে একটি নতুন ডিরেক্টরি তৈরি করতে চাই তবে আমি mkdir test
লিখব .
-
rmdir ডিরেক্টরী সরান এর জন্য দাঁড়ায় এবং এটি ঠিক তাই করে। এটির
mkdir
হিসাবে ডিরেক্টরি নামের প্যারামিটার প্রয়োজন :rmdir test
. -
স্পর্শ করুন আপনাকে আপনার বর্তমান ডিরেক্টরিতে একটি খালি ফাইল তৈরি করতে দেয়। প্যারামিটার হিসাবে এটি ফাইলের নাম নেয়, যেমন
touch test.txt
. -
rm
rmdir
আপনাকে ফাইল মুছে ফেলতে দেয় আপনাকে ডিরেক্টরি অপসারণ করতে দেয়।
rm test.txt
-
cp আপনাকে ফাইল বা ডিরেক্টরি অনুলিপি করতে দেয়। এই কমান্ডটি দুটি প্যারামিটার নেয়:প্রথমটি হল যে ফাইল বা ডিরেক্টরিটি আপনি কপি করতে চান এবং দ্বিতীয়টি হল আপনার কপির গন্তব্য (আপনি আপনার ফাইল/ডিরেক্টরি কোথায় কপি করতে চান)।
যদি আমি একই ডিরেক্টরিতে আমার txt ফাইলের একটি অনুলিপি করতে চাই, আমি নিম্নলিখিতটি লিখতে পারি:
cp test.txt testCopy.txt
দেখুন যে ডিরেক্টরিটি পরিবর্তন না হয়, "গন্তব্য" হিসাবে আমি ফাইলের নতুন নাম লিখি৷
যদি আমি একটি ভিন্ন ডিরেক্টরিতে ফাইলটি অনুলিপি করতে চাই, কিন্তু একই ফাইলের নাম রাখতে চাই, আমি এটি লিখতে পারি:
cp test.txt ./testFolder/
এবং যদি আমি ক্ষেত্রের নাম পরিবর্তন করে একটি ভিন্ন ফোল্ডারে অনুলিপি করতে চাই, অবশ্যই আমি এটি লিখতে পারি:
cp test.txt ./testFolder/testCopy.txt
- mv সরানোর জন্য সংক্ষিপ্ত, এবং আমাদের একটি ফাইল বা ডিরেক্টরিকে এক জায়গা থেকে অন্য জায়গায় স্থানান্তর করতে দেয়। অর্থাৎ, এটি একটি নতুন ডিরেক্টরিতে তৈরি করুন এবং এটিকে পূর্ববর্তীটিতে মুছুন (যেমন আপনি কাটা এবং পেস্ট করে করতে পারেন)।
আবার, এই কমান্ডটি দুটি প্যারেমার নেয়, যে ফাইল বা ডিরেক্টরিটি আমরা সরাতে চাই এবং গন্তব্য।
mv test.txt ./testFolder/
আমরা চাইলে একই কমান্ডে ফাইলের নামও পরিবর্তন করতে পারি:
mv test.txt ./testFolder/testCopy.txt
- মাথা আপনাকে সরাসরি টার্মিনাল থেকে একটি ফাইল বা পাইপড ডেটার শুরু দেখতে দেয়।
head test.txt // Output:
this is the beginning of my test file
- লেজ একই কাজ করে কিন্তু এটি আপনাকে ফাইলের শেষ দেখাবে।
tail test.txt // Output:
this is the end of my test file
- --সহায়তা পতাকা বেশিরভাগ কমান্ডে ব্যবহার করা যেতে পারে এবং এটি প্রদত্ত কমান্ডটি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে তথ্য প্রদান করবে।
cd --help // output:
cd: cd [-L|[-P [-e]] [-@]] [dir]
Change the shell working directory.
বর্তমান ডিরেক্টরি ডিআইআর-এ পরিবর্তন করুন। ডিফল্ট ডিআইআর হল হোম শেল ভেরিয়েবলের মান।
পরিবর্তনশীল CDPATH ডিআইআর ধারণকারী ডিরেক্টরির জন্য অনুসন্ধান পথ সংজ্ঞায়িত করে। CDPATH-এ বিকল্প ডিরেক্টরির নামগুলি একটি কোলন :
দ্বারা পৃথক করা হয় .
DIR ...
দিয়ে শুরু হলে একটি নাল ডিরেক্টরির নাম বর্তমান ডিরেক্টরির মতোই .
- একইভাবে, মানুষ কমান্ড কোনো নির্দিষ্ট কমান্ড সম্পর্কে তথ্য প্রদান করবে।
man cp // output:
CP(1) User Commands CP(1)
NAME
cp - copy files and directories
SYNOPSIS
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
DESCRIPTION
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options
too.
-a, --archive
same as -dR --preserve=all
--attributes-only
don't copy the file data, just the attributes
...
এমনকি আপনি man bash
লিখতে পারেন এবং এটি এই শেল সম্পর্কে জানতে যা যা আছে সে সম্পর্কে একটি বিশাল ম্যানুয়াল ফিরিয়ে দেবে।;)
- কোড আপনার ডিফল্ট কোড সম্পাদক খুলবে। আপনি যদি একা কমান্ডটি প্রবেশ করেন তবে এটি আপনার খোলা সর্বশেষ ফাইল/ডিরেক্টরি সহ সম্পাদকটি খুলবে৷
আপনি একটি প্রদত্ত ফাইলকে প্যারামিটার হিসাবে পাস করেও খুলতে পারেন:code test.txt
.
অথবা নতুন ফাইলের নাম পাস করে একটি নতুন ফাইল খুলুন:code thisIsAJsFile.js
.
- সম্পাদনা করুন আপনার ডিফল্ট কমান্ড লাইন টেক্সট এডিটরে টেক্সট ফাইল খুলবে (যা আপনি ম্যাক বা লিনাক্সে থাকলে সম্ভবত ন্যানো বা ভিম হবে)।
আপনি যদি আপনার ফাইলটি খুলেন এবং তারপরে আপনার সম্পাদক থেকে প্রস্থান করতে না পারেন তবে প্রথমে এই মেমেটি দেখুন:
![vimExit](https://www.freecodecamp.org/news/content/images/2022/03/vimExit.png)
এবং তারপর :q!
টাইপ করুন এবং এন্টার চাপুন।
মেমটি মজার কারণ সবাই প্রথমে CLI টেক্সট এডিটরদের সাথে লড়াই করে, কারণ বেশিরভাগ অ্যাকশন (যেমন এডিটর থেকে প্রস্থান করা) কীবোর্ড শর্টকাট দিয়ে করা হয়। এই সম্পাদকগুলি ব্যবহার করা একটি সম্পূর্ণ অন্য বিষয়, তাই আপনি যদি আরও শিখতে আগ্রহী হন তবে টিউটোরিয়ালগুলি সন্ধান করুন৷;)
-
ctrl+c টার্মিনালটি চলমান বর্তমান প্রক্রিয়া থেকে প্রস্থান করার অনুমতি দেয়। উদাহরণস্বরূপ, আপনি যদি
npx create-react-app
দিয়ে একটি রিঅ্যাক্ট অ্যাপ তৈরি করেন এবং কিছু সময়ে বিল্ডটি বাতিল করতে চান, শুধু ctrl+c টিপুন এবং এটা বন্ধ হয়ে যাবে। -
টার্মিনাল থেকে পাঠ্য অনুলিপি করা ctrl+shift+c দিয়ে করা যেতে পারে এবং পেস্ট করা ctrl+shift+v দিয়ে করা যেতে পারে
-
পরিষ্কার পূর্ববর্তী সমস্ত সামগ্রী থেকে আপনার টার্মিনাল সাফ করবে৷
৷ -
প্রস্থান করুন আপনার টার্মিনাল বন্ধ করবে এবং (এটি একটি কমান্ড নয় তবে এটিও দুর্দান্ত) ctrl+alt+t আপনার জন্য একটি নতুন টার্মিনাল খুলবে৷
-
আপ এবং ডাউন কী টিপে৷ আপনি আপনার প্রবেশ করা পূর্ববর্তী কমান্ডের মাধ্যমে নেভিগেট করতে পারেন।
-
ট্যাব টিপে আপনি এখন পর্যন্ত লেখা পাঠ্যের উপর ভিত্তি করে স্বয়ংসম্পূর্ণতা পাবেন। ট্যাব দুবার টিপে আপনি এখন পর্যন্ত যে পাঠ্য লিখেছেন তার উপর ভিত্তি করে আপনি পরামর্শ পাবেন।
উদাহরণস্বরূপ যদি আমি edit test
লিখি এবং ট্যাব দুইবার , আমি testFolder/ test.txt
পাই . যদি আমি edit test
লিখি এবং ট্যাব টিপুন আমার টেক্সট edit test.txt
করতে স্বয়ংসম্পূর্ণ হয়
Git কমান্ড
ফাইল সিস্টেমের চারপাশে কাজ করা এবং জিনিসগুলি ইনস্টল/আনইন্সটল করার পাশাপাশি, গিট এবং অনলাইন রেপোর সাথে ইন্টারঅ্যাক্ট করা সম্ভবত সবচেয়ে সাধারণ জিনিস যা আপনি বিকাশকারী হিসাবে টার্মিনাল ব্যবহার করতে যাচ্ছেন৷
আশেপাশে ক্লিক করার চেয়ে টার্মিনাল থেকে এটি করা অনেক বেশি কার্যকর, তাই আসুন সেখানে সবচেয়ে দরকারী গিট কমান্ডগুলি একবার দেখে নেওয়া যাক৷
- git init আপনার জন্য একটি নতুন স্থানীয় সংগ্রহস্থল তৈরি করবে৷
git init // output:
Initialized empty Git repository in /home/German/Desktop/testFolder/.git/
-
গিট যোগ করুন স্টেজিং এ এক বা একাধিক ফাইল যোগ করে। আপনি স্টেজিং এ যোগ করার জন্য একটি নির্দিষ্ট ফাইলের বিস্তারিত বিবরণ দিতে পারেন অথবা
git add .
টাইপ করে সমস্ত পরিবর্তিত ফাইল যোগ করতে পারেন। -
গিট কমিট সংগ্রহস্থলে আপনার পরিবর্তনগুলি কমিট করে। প্রতিশ্রুতি সর্বদা অবশ্যই
-m
এর সাথে থাকতে হবে পতাকা এবং প্রতিশ্রুতি বার্তা৷
git commit -m 'This is a test commit' // output:
[master (root-commit) 6101dfe] This is a test commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.js
- গিট স্ট্যাটাস আপনি বর্তমানে কোন শাখায় আছেন এবং আপনার প্রতিশ্রুতিতে পরিবর্তন আছে কি না তা আপনাকে বলে।
git status // output:
On branch master
nothing to commit, working tree clean
- গিট ক্লোন আপনি বর্তমানে যে ডিরেক্টরিতে আছেন সেটিতে একটি সংগ্রহস্থল ক্লোন (কপি) করার অনুমতি দেয়। মনে রাখবেন আপনি রিমোট রিপোজিটরি (গিটহাব, গিটল্যাবে এবং আরও অনেক কিছু) এবং স্থানীয় রিপোজিটরি (যেগুলি আপনার কম্পিউটারে সংরক্ষিত আছে) ক্লোন করতে পারবেন।
git clone https://github.com/coccagerman/MazeGenerator.git // output:
Cloning into 'MazeGenerator'...
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 15 (delta 1), reused 11 (delta 0), pack-reused 0
Unpacking objects: 100% (15/15), done.
- গিট রিমোট অ্যাড অরিজিন আপনি আপনার প্রজেক্টের জন্য যে রিমোট রিপোজিটরি ব্যবহার করতে যাচ্ছেন তার URL বিস্তারিত জানাতে ব্যবহার করা হয়। আপনি যদি কোনো সময়ে এটি পরিবর্তন করতে চান, আপনি
git remote set-url origin
কমান্ড ব্যবহার করে এটি করতে পারেন .
git remote add origin https://github.com/coccagerman/testRepo.git
মনে রাখবেন এর URL পেতে আপনাকে প্রথমে আপনার রিমোট রেপো তৈরি করতে হবে। আমরা পরে একটু স্ক্রিপ্ট সহ কমান্ড লাইন থেকে আপনি কিভাবে এটি করতে পারেন তা দেখতে পাবেন।;)
- git remote -v আপনি যে বর্তমান রিমোট রিপোজিটরি ব্যবহার করছেন তা তালিকাভুক্ত করতে দেয়।
git remote -v // output:
origin https://github.com/coccagerman/testRepo.git (fetch)
origin https://github.com/coccagerman/testRepo.git (push)
- গিট পুশ আপনার রিমোট রেপোতে আপনার প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি আপলোড করে৷
git push // output:
Counting objects: 2, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 266 bytes | 266.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
- গিট শাখা আপনার রেপোতে সমস্ত উপলব্ধ শাখা তালিকাভুক্ত করে এবং আপনাকে বলে যে আপনি বর্তমানে কোন শাখায় আছেন। আপনি যদি একটি নতুন শাখা তৈরি করতে চান তবে আপনাকে কেবলমাত্র
git branch <branch name>
এর মত প্যারামিটার হিসাবে নতুন শাখার নাম যোগ করতে হবে .
git branch // output:
* main
- গিট চেকআউট আপনাকে এক শাখা থেকে অন্য শাখায় নিয়ে যায়। এটি আপনার গন্তব্য শাখাকে প্যারিমিটার হিসাবে নেয়।
git checkout newBranch // output:
Switched to branch 'newBranch'
- গিট টান আপনার দূরবর্তী সংগ্রহস্থল থেকে কোড টানে (ডাউনলোড করে) এবং এটিকে আপনার স্থানীয় রেপোর সাথে একত্রিত করে। দলে কাজ করার সময় এটি বিশেষভাবে কার্যকর, যখন অনেক ডেভেলপার একই কোড বেসে কাজ করছে। এই ক্ষেত্রে প্রতিটি বিকাশকারী পর্যায়ক্রমে দূরবর্তী রেপো থেকে একটি কোড বেসে কাজ করার জন্য টেনে আনে যাতে অন্যান্য সমস্ত devs দ্বারা করা পরিবর্তনগুলি অন্তর্ভুক্ত থাকে৷
যদি আপনার রিমোট রেপোতে নতুন কোড থাকে, কমান্ডটি প্রকৃত ফাইলগুলি ফিরিয়ে দেবে যা পুলে পরিবর্তন করা হয়েছিল। তা না হলে, আমরা Already up to date
পাই .
git pull // output:
Already up to date.
- git diff আপনি বর্তমানে যে শাখায় আছেন এবং অন্য শাখার মধ্যে পার্থক্য দেখতে আপনাকে অনুমতি দেয়৷
git diff newBranch // output:
diff --git a/newFileInNewBranch.js b/newFileInNewBranch.js
deleted file mode 100644
index e69de29..0000000
একটি পার্শ্ব মন্তব্য হিসাবে, শাখা বা রেপোর মধ্যে পার্থক্য তুলনা করার সময়, সাধারণত মেল্ডের মত ভিজ্যুয়াল টুল ব্যবহার করা হয়। এটা এমন নয় যে আপনি এটিকে টার্মিনালে সরাসরি ভিজ্যুয়ালাইজ করতে পারবেন না, তবে এই টুলগুলি একটি পরিষ্কার ভিজ্যুয়ালাইজেশনের জন্য দুর্দান্ত৷
- গিট মার্জ আপনি বর্তমানে অন্য যে শাখায় আছেন সেটিকে একত্রিত করে (একত্রিত করে)। মনে রাখবেন পরিবর্তনগুলি শুধুমাত্র আপনি বর্তমানে যে শাখায় আছেন সেই শাখায় অন্তর্ভুক্ত করা হবে, অন্য একটিতে নয়৷
git merge newBranch // output:
Updating f15cf51..3a3d62f
Fast-forward
newFileInNewBranch.js | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 newFileInNewBranch.js
- গিট লগ রেপোতে আপনার করা সমস্ত পূর্ববর্তী প্রতিশ্রুতি তালিকাভুক্ত করে।
git log // output:
commit 3a3d62fe7cea7c09403c048e971a5172459d0948 (HEAD -> main, tag: TestTag, origin/main, newBranch)
Author: German Cocca <[email protected]>
Date: Fri Apr 1 18:48:20 2022 -0300
Added new file
commit f15cf515dd3ec398210108dce092debf26ff9e12
Author: German Cocca <[email protected]>
...
- --সহায়তা ফ্ল্যাগ আপনাকে একটি প্রদত্ত কমান্ড সম্পর্কে তথ্য দেখাবে, ঠিক একইভাবে এটি ব্যাশের সাথে কাজ করে।
git diff --help // output:
GIT-DIFF(1) Git Manual GIT-DIFF(1)
NAME
git-diff - Show changes between commits, commit and working tree, etc
SYNOPSIS
git diff [options] [<commit>] [--] [<path>...]
git diff [options] --cached [<commit>] [--] [<path>...]
...
আমাদের প্রথম স্ক্রিপ্ট
এখন আমরা কমান্ড লাইন, স্ক্রিপ্টিং এর সত্যিকারের মজাদার এবং দুর্দান্ত অংশে যাওয়ার জন্য প্রস্তুত!
যেমনটি আমি আগে উল্লেখ করেছি, একটি স্ক্রিপ্ট কমান্ড বা নির্দেশাবলীর একটি সিরিজ ছাড়া আর কিছুই নয় যা আমরা যে কোনও সময়ে কার্যকর করতে পারি। আমরা কীভাবে একটি কোড করতে পারি তা ব্যাখ্যা করার জন্য, আমরা একটি সাধারণ উদাহরণ ব্যবহার করব যা আমাদের একটি একক কমান্ড চালানোর মাধ্যমে একটি গিথুব রেপো তৈরি করতে দেয়।;)
-
প্রথমেই একটি
.sh
তৈরি করুন ফাইল যেখানে খুশি লাগাতে পারেন। আমি আমারnewGhRepo.sh
কে কল করেছি . -
তারপর এটি আপনার পছন্দের পাঠ্য/কোড সম্পাদকে খুলুন৷
৷ -
আমাদের প্রথম লাইনে, আমরা নিম্নলিখিত লিখব:
#! /bin/sh
একে শেবাং বলা হয় , এবং এর কাজ হল এই স্ক্রিপ্টটি কোন শেলটি চালাবে তা ঘোষণা করা।
মনে রাখবেন আগে যখন আমরা উল্লেখ করেছি যে আমরা একটি প্রদত্ত শেল সাধারণ ইন্টারঅ্যাকশনের জন্য এবং অন্য একটি প্রদত্ত শেল একটি স্ক্রিপ্ট চালানোর জন্য ব্যবহার করতে পারি? ঠিক আছে, শেবাং হল সেই নির্দেশ যা নির্দেশ করে যে শেল কি স্ক্রিপ্ট চালায়।
যেমন উল্লেখ করা হয়েছে, আমরা স্ক্রিপ্টগুলি চালানোর জন্য একটি "স্ট্রিপড ডাউন" শেল (এছাড়াও sh শেল নামে পরিচিত) ব্যবহার করছি কারণ সেগুলি আরও দক্ষ (যদিও পার্থক্যটি সৎ হতে অলক্ষিত হতে পারে, এটি কেবল একটি ব্যক্তিগত পছন্দ)। আমার কম্পিউটারে আমার sh শেল হিসাবে ড্যাশ আছে।
যদি আমরা এই স্ক্রিপ্টটি ব্যাশের সাথে চালাতে চাই তবে শেবাং হবে #! /bin/bash
- আমাদের পরবর্তী লাইন হবে
repoName=$1
এখানে আমরা একটি ভেরিয়েবল ঘোষণা করছি repoName বলা হয়, এবং স্ক্রিপ্টটি প্রাপ্ত প্রথম প্যারামিটারের মানের সাথে এটি নির্ধারণ করে।
একটি প্যারামিটার অক্ষরের একটি সেট যা স্ক্রিপ্ট/কমান্ডের পরে প্রবেশ করা হয়। cd
এর সাথে লাইক করুন কমান্ড, ডিরেক্টরি পরিবর্তন করার জন্য আমাদের একটি ডিরেক্টরি প্যারামিটার নির্দিষ্ট করতে হবে (যেমন:cd testFolder
)।
আমরা একটি স্ক্রিপ্টের মধ্যে পরামিতি সনাক্ত করতে পারি তা হল ডলার চিহ্ন ব্যবহার করে এবং সেই ক্রমে যে প্যারামিটারটি প্রত্যাশিত।
যদি আমি একাধিক প্যারামিটারের আশা করি তবে আমি লিখতে পারি:
paramOne=$1
paramTwo=$2
paramThree=$3
...
- তাই আমরা আমাদের স্ক্রিপ্টের প্যারামিটার হিসাবে সংগ্রহস্থলের নামটি আশা করছি। কিন্তু ব্যবহারকারী এটা লিখতে ভুলে গেলে কি হবে? এর জন্য আমাদের পরিকল্পনা করতে হবে তাই পরবর্তীতে আমরা একটি শর্তাধীন কোড করতে যাচ্ছি যে প্যারামিটার না পাওয়া পর্যন্ত ব্যবহারকারীকে রেপো নাম লিখতে বলে।
আমরা এটি এভাবে করতে পারি:
while [ -z "$repoName" ]
do
echo 'Provide a repository name'
read -r -p $'Repository name:' repoName
done
আমরা এখানে যা করছি তা হল:
- যদিও repoName ভেরিয়েবল বরাদ্দ করা হয় না (
while [ -z "$repoName" ]
) - কনসোলে এই বার্তাটি লিখুন (
echo 'Provide a repository name'
) - তারপর ব্যবহারকারী যা ইনপুট দেয় তা পড়ুন এবং repoName ভেরিয়েবলে ইনপুট বরাদ্দ করুন (
read -r -p $'Repository name:' repoName
)
- এখন যেহেতু আমাদের রেপো নাম রয়েছে, আমরা এইভাবে আমাদের স্থানীয় গিট রেপো তৈরি করতে পারি:
echo "# $repoName" >> README.md
git init
git add .
git commit -m "First commit"
এটি একটি রিডমি ফাইল তৈরি করছে এবং রেপো নামের সাথে একটি একক লাইন লিখছে (echo "# $repoName" >> README.md
) এবং তারপর গিট রেপো আরম্ভ করে এবং একটি প্রথম প্রতিশ্রুতি তৈরি করে।
- তারপর এখন আমাদের রেপো গিথুবে আপলোড করার সময়। এটি করতে আমরা নিম্নলিখিত কমান্ডে github API-এর সুবিধা নিতে যাচ্ছি:
curl -u coccagerman https://api.github.com/user/repos -d '{"name": "'"$repoName"'", "private":false}'
কুঁচকানো অনেকগুলি সমর্থিত প্রোটোকলের মধ্যে একটি ব্যবহার করে সার্ভার থেকে বা সার্ভারে ডেটা স্থানান্তর করার একটি কমান্ড৷
এরপর আমরা -u
ব্যবহার করছি যে ব্যবহারকারীকে আমরা (-u coccagerman
এর জন্য রেপো তৈরি করছি তা ঘোষণা করার জন্য পতাকা )।
এরপরে GitHub API (https://api.github.com/user/repos
দ্বারা প্রদত্ত এন্ডপয়েন্টটি আসে )
এবং শেষ আমরা -d
ব্যবহার করছি এই কমান্ডে প্যারামিটার পাস করার জন্য পতাকা। এই ক্ষেত্রে আমরা সংগ্রহস্থলের নামটি নির্দেশ করছি (যার জন্য আমরা আমাদের repoName
ব্যবহার করছি পরিবর্তনশীল) এবং private
সেটিং false
করার বিকল্প , যেহেতু আমরা চাই আমাদের রেপো পুইবলিক হোক।
এপিআই-এ অনেক অন্যান্য কনফিগার অপশন পাওয়া যায়, তাই আরও তথ্যের জন্য ডক্স চেক করুন।
- এই কমান্ডটি চালানোর পরে, GitHub আমাদের ব্যক্তিগত টোকেন প্রবেশ করতে অনুরোধ করবে প্রমাণীকরণের জন্য।
যদি আপনার কাছে এখনও একটি ব্যক্তিগত টোকেন না থাকে, তাহলে আপনি সেটিংস> বিকাশকারী সেটিংস> ব্যক্তিগত অ্যাক্সেস টোকেন এ GitHub-এ এটি তৈরি করতে পারেন।
- ভাল, আমরা এখন প্রায় শেষ! আমাদের এখন যা দরকার তা হল দূরবর্তী URL আমাদের নতুন তৈরি গিটহাব রেপোর।
এটি পেতে আমরা আবার কার্ল এবং গিটহাব এপিআই ব্যবহার করতে যাচ্ছি, এভাবে:
GIT_URL=$(curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/coccagerman/"$repoName" | jq -r '.clone_url')
Here we're declaring a variable called GIT_URL
and assigning it to whatever the following command returns.
The -H
flag sets the header of our request.
Then we pass the GitHub API endpoint, which should contain our user name and repo name (https://api.github.com/repos/coccagerman/"$repoName"
).
Then we're piping the return value of our request. Piping just means passing the return value of a process as the input value of another process. We can do it with the |
symbol like <process1> | <process2>
.
And finally we run the jq
command, which is a tool for processing JSON inputs. Here we tell it to get the value of .clone_url
which is where our remote git URL will be according to the data format provided by the GitHub API.
- And as last step, we rename our master branch to main, add the remote origin we just obtained, and push our code to GitHub! =D
git branch -M main
git remote add origin $GIT_URL
git push -u origin main
Our full script should look something like this:
#! /bin/sh
repoName=$1
while [ -z "$repoName" ]
do
echo 'Provide a repository name'
read -r -p $'Repository name:' repoName
done
echo "# $repoName" >> README.md
git init
git add .
git commit -m "First commit"
curl -u <yourUserName> https://api.github.com/user/repos -d '{"name": "'"$repoName"'", "private":false}'
GIT_URL=$(curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/<yourUserName>/"$repoName" | jq -r '.clone_url')
git branch -M main
git remote add origin $GIT_URL
git push -u origin main
- Now it's time to test our script! To execute it there're two things we can do.
One option is to enter the shell name and pass the file as parameter, like:dash ../ger/code/projects/scripts/newGhRepo.sh
.
And the other is to make the file executable by running chmod u+x ../ger/code/projects/scripts/newGhRepo.sh
.
Then you can just execute the file directly by running ../ger/code/projects/scripts/newGhRepo.sh
.
And that's it! We have our script up and running. Everytime we need a new repo we can just execute this script from whatever directory we're in.
But there's something a bit annoying about this. We need to remember the exact route of the script directory. Wouldn't it be cool to execute the script with a single command that it's always the same independently of what directory we're at?
In come bash aliases to solve our problem.
Aliases are a way bash provides for making names for exact commands we want to run.
To create a new alias, we need to edit the bash configuration files in our system. This files are normally located in the home directory. Aliases can be defined in different files (mainly .bashrc
or .bash_aliases
).
I have a .bash_aliases
file on my system, so let's edit that.
-
In our CLI we enter
cd
to go over home directory. -
Then we can enter
ls -a
to list all files (includen hidden ones) and check if we have either a.bashrc
or.bash_aliases
file in our system. -
We open the file with our text/code editor of choice.
-
And we write our new alias like this:
alias newghrepo="dash /home/German/Desktop/ger/code/projects/scripts/newGhRepo.sh"
Here I'm declaring the alias name, the actual command I'm going to enter to run the script (newghrepo
).
And between quotes, define what that alias is going to do ("dash /home/German/Desktop/ger/code/projects/scripts/newGhRepo.sh"
)
See that I'm passing the absolute path of the script, so that this command works the same no matter what my current directory is.
If you don't know what the absolute path of your script is, go to the script directory on your terminal and enter readlink -f newGhRepo.sh
. That should return the full path for you.;)
- After we're done editing, we save our file, restart our terminal, and voilà! Now we can run our script by just entering
newghrepo
, no matter in what directory we currently are. Much quicker than opening the browser and clicking around to create our repo! =D
I hope this gives you a little taste of the kind of optimizations that are possible with scripting. It certainly requires a bit more work the first time you write, test, and set up the script. But after that, you'll never have to perform that task manually again.;)
Round up
The terminal can feel like an intimidating and intricate place when you're starting out. But it's certainly worth it to put time and effort into learning the ins and outs of it. The efficiency benefits are too good to pass up!
If you're interested in learning more about the terminal and Bash, Zach Gollwitzer has an awesome crash course series on youtube.
He has also great tutorials on other topics such as Node and Javascript, so I recommend that you follow him.;)
As always, I hope you enjoyed the article and learned something new. If you want, you can also follow me on linkedin or twitter.
Cheers and see you in the next one! =D