ব্যাশে মাল্টি লাইন ওরফে


13

আমি নিম্নলিখিত স্ক্রিপ্ট আছে। এটি একটি সাধারণ পরীক্ষার ক্ষেত্রে যেখানে aকোনও স্ট্রিংয়ের মান হয় এবং bএটি একটি পাথ বলে মনে করা হয়।

#!/bin/bash

alias jo "\
echo "please enter values "\
read a \
read -e b \
echo "My values are $a and $b""

তবে যখনই আমি ./sample.sh কার্যকর করার চেষ্টা করি আমি নিম্নলিখিত ত্রুটিগুলি পাই:

./sample.sh: line 3: alias: jo: not found
./sample.sh: line 3: alias: echo please: not found
./sample.sh: line 3: alias: enter: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: read a read -e b echo My: not found
./sample.sh: line 3: alias: values: not found
./sample.sh: line 3: alias: are: not found
./sample.sh: line 3: alias: and: not found
./sample.sh: line 3: alias: : not found

এবং আমি চেষ্টা করার পরে source sample.shআমি নিম্নলিখিত পেতে:

a: Undefined variable.

আমার উদ্দেশ্য ছিল এটিকে একটি উপাধি তৈরি করা যাতে আমি এই স্ক্রিপ্টটি উত্স করে দিতে পারি এবং কমান্ডের লাইনটি চালানোর জন্য কেবল উপনামটি চালাতে পারি। কেউ কি এটি দেখে এবং আমাকে ত্রুটিটি কী তা জানাতে পারেন?


3
আপনি যখন মনে করেন আপনার মাল্টলাইন এবং একাধিক-কমান্ড ওরফে প্রয়োজন, তখন সময় হয় কোনও ফাংশন সংজ্ঞায়িত করা বা স্ক্রিপ্ট তৈরি করা।
সের্গেই কোলোডিয়াজনি

@ সার্জিইক্লোডিয়াজনি উল্লেখ করেছেন যে
জোভিন মিরান্ডা

উত্তর:


15

আপনার এখানে কয়েকটি সমস্যা আছে

  1. মধ্যে অসদৃশ csh, এ bash(এবং অন্যান্য বোর্ন মত শাঁস), alias লেখা একটি সঙ্গে হস্তান্তর করা হয়েছে =চিহ্ন যেমনalias foo=bar

  2. উক্তিগুলি এর মতো বাসা বাঁধতে পারে না; এক্ষেত্রে, আপনি ওরফে এবং ডাবল উদ্ধৃতিগুলির চারপাশে একক উদ্ধৃতি ব্যবহার করতে পারেন

  3. ব্যাকস্ল্যাশ \একটি লাইন ধারাবাহিকতা চরিত্র: সিন্ট্যাক্টিক্যালি এটি আপনার কমান্ডটিকে একক লাইনে পরিণত করে (আপনি যা চান তার বিপরীতে)

সুতরাং

#!/bin/bash

alias jo='
echo "please enter values "
read a 
read -e b 
echo "My values are $a and $b"'

পরীক্ষা করা: প্রথমে আমরা ফাইলটি উত্স করি:

$ . ./myscript.sh

তারপর

$ jo
please enter values 
foo bar
baz
My values are foo bar and baz

যদি আপনি কোনও স্ক্রিপ্টের মধ্যেই উপনামটি ব্যবহার করতে চান , তবে মনে রাখবেন যে এলিয়াসগুলি কেবল ইন্টারেক্টিভ শেলগুলিতে ডিফল্টরূপে সক্ষম হয়: স্ক্রিপ্টের মধ্যে সেগুলি সক্ষম করতে আপনাকে যুক্ত করতে হবে

shopt -s expand_aliases

উপরের সমস্ত কিছু নির্বিশেষে, আপনাকে এই জাতীয় জিনিসের পরিবর্তে একটি শেল ফাংশন ব্যবহার করা উচিত


1
ওরফে চারপাশে একক উদ্ধৃতি ব্যবহার করার আরেকটি কারণ হ'ল ডাবল কোটের অভ্যন্তরের ভেরিয়েবলগুলি প্রসারিত হয়, $aএবং $bসংজ্ঞা সময় এটিকে প্রসারিত করা হয়, যখন উপনামটি কার্যকর করা হয় তখন নয়।
বার্মার

সমাধানের জন্য ধন্যবাদ, এখানে সমস্যাটি আমার দ্বারা প্রদত্ত স্ক্রিপ্টটি লেখা সত্ত্বেও আমার রয়েছে এবং আমি যখন এটি সম্পাদন করি তখন আমি যোগ পেতে পারি: কমান্ডটি কোনও কারণে নিবন্ধটি পাওয়া যায় নি। আমি যখন ফাইলটি উত্স করি তখন আমি এই ত্রুটিটি তুলনাহীন get ফাংশন কলটি সাধারণত স্ক্রিপ্টের মধ্যে থাকে alias উপনামের ব্যবহার কেবলমাত্র এটি নিশ্চিত করতে হয়েছিল যে আমি এটি কোনও ফাংশনের মতো ব্যবহার করতে পারি এবং যখনই আমি এটি চাইব ফোন করতে পারি
জোভিন মিরান্ডা

যাইহোক এটি ঠিক করে রেখেছি, আমি ডিফল্ট শেল টিসিএসএস হিসাবে ব্যবহার করছিলাম তাই সমস্যাটি আসছিল।
জোভিন মিরান্ডা

8

পসিক্স-টাইপ শেলটিতে ফাংশনগুলি ব্যবহার করতে অভ্যস্ত হন। আপনার উদ্ধৃতি সম্পর্কিত কোনও সমস্যা নেই:

jo () {
    read -p "Enter value for 'a': " -e a 
    read -p "Enter value for 'b': " -e b 
    echo "My values are $a and $b"
}

সমাধানের জন্য ধন্যবাদ, যখন আমি স্ক্রিপ্টের মধ্যে ফাংশনটি কল করি তখন এটি কাজ করেছিল। কমান্ড লাইন থেকে নিজেই কীভাবে ফাংশনটি কল করব, কারণ এর সাথে আমার একাধিক স্ক্রিপ্ট রয়েছে এবং বরং এমন পরিস্থিতি চাই যেখানে আমি সমস্ত ফাংশন একটি ফাইলে লিখি তবে পরিবর্তে কমান্ড লাইন থেকে তাদের কল করি। আমি ওরফে যাওয়ার পুরো কারণটি ছিল
জোভিন মিরান্ডা

এটা ঠিক একই। ফাইলে একটি ফাইল এবং উত্স ফাইলটিতে রাখুন
গ্লেন জ্যাকম্যান

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