বাশ স্ক্রিপ্টগুলিতে শুকনো রান প্রয়োগ করা


15

কীভাবে একজন বাশ স্ক্রিপ্টে একটি ড্রাই-রান বিকল্পটি প্রয়োগ করতে পারে?

আমি প্রতিটি ইঙ্গিতে প্রতিটি কমান্ড মোড়ানো এবং স্ক্রিপ্টটি ড্রাই-রান দিয়ে চলতে থাকলে কমান্ডটি চালানোর পরিবর্তে এটি প্রতিধ্বনি করার কথা ভাবতে পারি।

আরেকটি উপায় হ'ল কোনও ফাংশন সংজ্ঞায়িত করা এবং তারপরে প্রতিটি ফাংশনটির মাধ্যমে প্রতিটি কমান্ড কল পাস করা।

কিছুটা এইরকম:

function _run () {
    if [[ "$DRY_RUN" ]]; then
        echo $@
    else
        $@
    fi
}

`_run mv /tmp/file /tmp/file2`

`DRY_RUN=true _run mv /tmp/file /tmp/file2`

এটি কি ঠিক ভুল এবং এটি করার আরও অনেক ভাল উপায় আছে?


সুতরাং, আপনি কমান্ডটি কমান্ডটি কি করবে তা মুদ্রণ করতে চাইবে (AR VARIABLES এর মান সহ) আসলে কমান্ডটি কার্যকর না করেই। আমি _run()কখনও কখনও 'সেট-এক্সভি' দিয়ে আপনার ফাংশনের মতো কিছু ব্যবহার করি তবে আমি আরও ভাল উপায় পছন্দ করি।
স্টিফান লাসিউস্কি

হ্যাঁ, ঠিক তাই আমি ভাবছি যদি কোনও অভ্যন্তরীণ পরিবর্তনশীল না থাকে তবে আপনি
বাশে

2
এই প্রশ্নটির সম্প্রদায় উইকি চিহ্নিত করা উচিত ছিল এমন কোনও কারণ নেই।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

বাশ হ'ল খোল। এটি শুকনো রান করার কোনও কারণ নেই। আপনি ইতিমধ্যে সম্পন্ন করার চেয়ে এটি করার আরও ভাল উপায় আছে বলে আমি মনে করি না।
d -_- বি

উত্তর:


2

দেখুন BashFAQ / 050: আমি একটি পরিবর্তনশীল একটি কমান্ড লাগাতে চেষ্টা করছি, কিন্তু জটিল ক্ষেত্রে সবসময় ব্যর্থ! এই বিষয়ে একটি আলোচনার জন্য।

যদিও এখন সরিয়ে দেওয়া হয়েছে, প্রোগ্রামগুলিতে পরীক্ষার ক্ষমতা কীভাবে যুক্ত করা যায় সে বিভাগটি এখনও কার্যকর হতে পারে।


বিকল্প নয়, তবে এটি পরীক্ষার জন্য দীর্ঘতর বাশ প্রোগ্রামগুলির সাথে কাজ করার জন্য দুর্দান্ত উত্স বলে মনে হচ্ছে।
আন্দ্রে সেরডেলিয়ুক

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

এই উত্তরটি এই নিবন্ধটির মূল বিষয়গুলি সংক্ষিপ্ত করে রাখলে এটি আরও বেশি কার্যকর হবে। একটি লাইনের উত্তরগুলি এখনও খারাপ উত্তর।
বুথ

4

আমি উত্তরটি ডেনিস উইলিয়ামসনের কাছ থেকে খেলতে চেয়েছি। আমি যা পেয়েছি তা এখানে:

Run () {
    if [ "$TEST" ]; then
        echo "$*"
        return 0
    fi

    eval "$@"
}

এখানে eval "$@"গুরুত্বপূর্ণ, এবং সহজভাবে করা ভাল $*$@সমস্ত পরামিতি ফেরত দেয় এবং $*কোনও সাদা স্থান / উদ্ধৃতি না দিয়ে সমস্ত পরামিতি দেয় returns

$ mkdir dir
$ touch dir/file1 dir/file2
$ FOO="dir/*"
$ TEST=true Run ls -l $FOO
ls -l dir/file1 dir/file2
$ Run ls -l $FOO
-rw-r--r--  1 stefanl  stefanl  0 Jun  2 21:06 dir/file1
-rw-r--r--  1 stefanl  stefanl  0 Jun  2 21:06 dir/file2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.