শেল সম্প্রসারণ কি মুদ্রণ করা সম্ভব?


18

আমি জানি নিয়মের একটি নির্দিষ্ট সেট রয়েছে যা শেল ব্যবহারকারী টাইপ করা কমান্ডগুলিকে প্রসারিত করে। (আসুন ব্যাশ শেল সম্পর্কে কথা বলা যাক।)

শেল প্রসারণের পরে ফর্মটিতে কোনও কমান্ড মুদ্রণ করা সম্ভব? শেল কীভাবে বিশেষ অক্ষর প্রসারিত করে তা নিশ্চিত করা এবং নিশ্চিত করা এটি একটি ভাল ইউটিলিটি বলে মনে হয়।

যেমন

$ echo *

{all the filenames in current dir}

আমি প্রসারিত কমান্ডটি মুদ্রণ করতে চাই, যা নিম্নলিখিত রেখাটি:

echo {all the filenames in .}

উত্তর:


13

কেবল ব্যবহার করুন echo... আপনি যে কমান্ডটি প্রসারিত করতে চান তার সামনে রাখুন। আমি এটি বেশ ঘন ঘন ব্যবহার করি।

$ ls
one.txt
two.txt
three.dat
$ echo rm *.txt
rm one.txt two.txt
$ rm *.txt

আপনি ব্যবহার করতে পারেন Homeএবং Delদ্রুত পূর্ববর্তীটি যোগ / মুছে ফেলার জন্য echo

সম্পাদনা মন্তব্যগুলিতে
যেমন উল্লেখ করা হয়েছে, কমান্ডটি কেবল একটি সরল কমান্ড না হলে এটি কাজ করবে না (যেমন এটি forলুপ হয়, পাইপ ব্যবহার করে |, &&বা এই জাতীয় কিছু)।


1
কোনও স্ক্রিপ্ট পরীক্ষা করার সময় আমি এটিই করি
বারমার

এটি এখনও অন্যান্য শেল টোকেন দ্বারা প্রভাবিত হয় echo cat * | someprogramযা আপনি এই উত্তর থেকে যা ভাবতে পারেন তা করে না।
Kroltan

13

আপনি ব্যবহার করতে পারেন set -x

উদাহরণস্বরূপ, স্ক্রিপ্টটি বিবেচনা করুন:

$ cat script.sh
set -x
echo *

যখন চালানো হয়, এটি echoআসলে এটি কার্যকর করার আগে বর্ধিত বিবৃতি প্রদর্শন করে :

$ bash script.sh
+ echo file1 file2 file3 script.sh
file1 file2 file3 script.sh

এবং, কুন্ডোর উল্লেখ করেছেন যে এটি কমান্ড লাইনে ইন্টারেক্টিভভাবে কাজ করে:

$ set -x
+ set -x
$ echo *
+ echo file1 file2 file3 script.sh
file1 file2 file3 script.sh

নথিপত্র

man bashset -xনিম্নলিখিত হিসাবে কি করে তা ব্যাখ্যা করে:

কমান্ড, কেস কমান্ড, কমান্ডের জন্য সিলেক্ট কমান্ড, বা পাটিগণিতের জন্য প্রতিটি সাধারণ কমান্ড প্রসারিত করার পরে, পিএস 4 এর বর্ধিত মান প্রদর্শন করুন, এরপরে কমান্ড এবং এর প্রসারিত আর্গুমেন্ট বা সম্পর্কিত শব্দ তালিকার তালিকা প্রদর্শন করুন।

PS4উপরে প্রদর্শিত হিসাবে, এর জন্য ডিফল্ট মান হল একটি স্থানের পরে একটি প্লাস চিহ্ন।


2
এবং এটি একটি ইন্টারেক্টিভ শেলটিতেও দুর্দান্ত কাজ করে (যা আমি মনে করি ওপি খুঁজছেন))
নিক মাত্তিও

7

একটি ইন্টারেক্টিভ শেল জন্য, টিপে Ctrl+xদ্বারা অনুসরণ *উল্লিখিত glob প্যাটার্ন যে উল্লিখিত glob প্যাটার্ন প্রসারিত সঙ্গে আপনার কমান্ড লাইন সম্পাদন করবে লেখার পরে। বাশ ম্যান পৃষ্ঠা থেকে:

গ্লোব-প্রসারিত শব্দ ( C-x *)

পয়েন্টের আগে শব্দটি পথের নাম প্রসারণের নিদর্শন হিসাবে বিবেচনা করা হয় এবং শব্দের প্রতিস্থাপন করে ফাইলের নামের মিলের তালিকা সন্নিবেশ করা হয়। যদি একটি সংখ্যার যুক্তি সরবরাহ করা হয় তবে পথের নাম প্রসারণের আগে একটি নক্ষত্র যুক্ত করা হয়।

আপনি গ্লোব-তালিকা-সম্প্রসারণ ( Ctrl+x, g) এও আগ্রহী হতে পারেন ।


আমি ম্যাক ওএস থেকে ব্যাশ ব্যবহার করছি। আমি ctrl + x, কমান্ড + এক্স চেষ্টা করেছি। এটি কোনও কমান্ড লাইন সম্পাদনা করে কিনা তা আমি নিশ্চিত নই। আপনি আরও বিস্তারিত বলতে পারেন?
ওয়েশি জেং

@ ওয়েশিজেং আমি জানি না কেন এটি আপনার পক্ষে কাজ করছে না। Ctrl+x, *টাইপ করার পরে echo *এবং এন্টার কী টিপানোর আগে আপনি কি চাপলেন? যদি এটি এখনও কাজ না করে, আপনি ~/.inputrcগ্লোব-প্রসারিত শব্দটিকে অন্য কোনও কিছুতে সংশোধন করতে এবং বাঁধতে পারেন।
জেমসডলিন

contrl + x শব্দের প্রতিধ্বনিতে কার্সার নিয়ে যায়, তবে কিছুই সম্পাদনা করে না। "Ctrl + x, " এর অর্থ কী ?? (এটি কি সিআরটিএল + এক্স বা সিআরটিএল + ??) * শিফটে রয়েছে, তাই আমাকে * পেতে ঠিক শিফট টিপতে হবে, তাই না?
ওয়েশি জেং

ডান, Ctrl+xতারপরে টিপুন Shift+8। আপনি যদি Ctrl+x, gকাজ করে সেগুলি চেষ্টা করতে পারেন , বা যেমনটি আগেই বলেছি, .inputrcফাইলটিতে আপনার নিজস্ব কী বরাদ্দ করুন।
জেমসডলিন

1

আপনি যদি আর্গুমেন্টগুলি প্রসারিত বা টোকেনাইজড দেখতে চান তবে আপনি এমন একটি প্রোগ্রাম বা স্ক্রিপ্ট ব্যবহার করতে পারেন যা এর আর্গুমেন্টগুলি মুদ্রণ করে। এখানে একটি বাস্তবায়ন রয়েছে bash:

#!/bin/bash

for (( i = 0; i <= $#; ++i )); do
    printf 'argv[%d] = %s\n' $i "${!i}"
done

ধরে নিচ্ছি যে আপনি এটি একটি ফাইলের মধ্যে printargs.shরেখেছেন (এবং এটি নির্বাহযোগ্য করে তুলেছেন), তাহলে আপনি এই জাতীয় আউটপুট পাবেন

$ ./printargs.sh a{1..3}b
argv[0] = ./printargs.sh
argv[1] = a1b
argv[2] = a2b
argv[3] = a3b
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.