স্ক্রিপ্টগুলি ডিবাগ করা, -x থেকে -xuxo পাইপফেইলের মধ্যে পার্থক্য কী?


17

স্ক্রিপ্টগুলি ডিবাগ করার আমি যে প্রধান -xউপায়টি জানি তা শাবাং ( #!/bin/bash -x) এ যুক্ত হচ্ছে।

আমি সম্প্রতি একটি নতুন উপায়ে এসে set -euxo pipefailপৌঁছেছি, কেবল শাবংয়ের নীচে যুক্ত করে:

#!/bin/bash
set -euxo pipefail

ডিবাগিংয়ের দুটি পদ্ধতির মধ্যে প্রধান পার্থক্য কী? আপনি কি একে অপরের চেয়েও বেশি পছন্দ করবেন?

নতুন হিসাবে, এখানে পড়ার পরে , আমি এই উপসংহারটি বের করতে পারিনি।

উত্তর:


15

প্রথমত, আমি ভয় করি যে http://explainshell.com-o দ্বারা পরিবেশন করা বিকল্পটির ব্যাখ্যা সম্পূর্ণ সঠিক নয়।

প্রদত্ত যে setএকটি Bulit-ইন কমান্ড আমরা তার ডকুমেন্টেশন সঙ্গে দেখতে পারেন helpনির্বাহ দ্বারা help set:

  -o option-name
      Set the variable corresponding to option-name:
          allexport    same as -a
          braceexpand  same as -B
          emacs        use an emacs-style line editing interface
          errexit      same as -e
          errtrace     same as -E
          functrace    same as -T
          hashall      same as -h
          histexpand   same as -H
          history      enable command history
          ignoreeof    the shell will not exit upon reading EOF
          interactive-comments
                       allow comments to appear in interactive commands
          keyword      same as -k
          monitor      same as -m
          noclobber    same as -C
          noexec       same as -n
          noglob       same as -f
          nolog        currently accepted but ignored
          notify       same as -b
          nounset      same as -u
          onecmd       same as -t
          physical     same as -P
          pipefail     the return value of a pipeline is the status of
                       the last command to exit with a non-zero status,
                       or zero if no command exited with a non-zero status
          posix        change the behavior of bash where the default
                       operation differs from the Posix standard to
                       match the standard
          privileged   same as -p
          verbose      same as -v
          vi           use a vi-style line editing interface
          xtrace       same as -x

আপনি দেখতে পাচ্ছেন এর -o pipefailঅর্থ:

পাইপলাইনের রিটার্ন মান হ'ল শূন্যহীন স্থিতি সহ প্রস্থান করার জন্য শেষ কমান্ডের স্থিতি, বা শূন্য-বিহীন স্থিতি সহ কোনও কমান্ড উপস্থিত না হলে শূন্য হয় zero

তবে এটি বলে না: Write the current settings of the options to standard output in an unspecified format.

এখনই, -xএটি ডিবাগিংয়ের জন্য ব্যবহৃত হয়েছে কারণ আপনি এটি ইতিমধ্যে জানেন এবং -eস্ক্রিপ্টে প্রথম ত্রুটির পরে কার্যকর করা বন্ধ হবে। এর মতো স্ক্রিপ্ট বিবেচনা করুন:

#!/usr/bin/env bash

set -euxo pipefail
echo hi
non-existent-command
echo bye

echo byeলাইন যখন মৃত্যুদন্ড কার্যকর করা হবে না -eকারণ ব্যবহার করা হয় non-existent-commandফেরত দেয় না 0:

+ echo hi
hi
+ non-existent-command
./setx.sh: line 5: non-existent-command: command not found

-eশেষ লাইনটি ছাড়া মুদ্রণ করা হবে কারণ ত্রুটি ঘটলেও আমরা Bashস্বয়ংক্রিয়ভাবে প্রস্থান করতে বলিনি :

+ echo hi
hi
+ non-existent-command
./setx.sh: line 5: non-existent-command: command not found
+ echo bye
bye

set -e প্রথম ত্রুটি দেখা দিলে স্ক্রিপ্টটি থামানো হবে কিনা তা নিশ্চিত করার জন্য প্রায়শই স্ক্রিপ্টের শীর্ষে স্থাপন করা হয় - উদাহরণস্বরূপ, যদি কোনও ফাইল ডাউনলোড করা ব্যর্থ হয় তবে এটি নিষ্কাশন করার কোনও মানে হয় না।


আমি উত্তরটি পড়েছি তবে আমি এটি পেয়েছি তা নিশ্চিত নই: আপনি ব্যবহার করার প্রস্তাবিত বাক্য গঠনটি কী (আমি বিশ্বাস করি এটি এর থেকে কিছুটা আলাদা set -uxo pipefail) different
জনডোইয়া

আপনি যদি বোঝাতে চান set -eএটি কেবল ত্রুটির কারণে স্ক্রিপ্টের সমাপ্তি ঘটায়। আপনার উদাহরণে এটি একসাথে একাধিক বিকল্পগুলির মধ্যে একটি -uxo pipefail
আরকাদিউস দ্রবকিজিক

আমি বলতে চাইছিলাম যে আপনি যদি আমাকে eযুক্তিটি ব্যবহার বা না করার পরামর্শ দেন তবে আমি নিশ্চিত নই ।
জনডোয়ায়

1
এটি আপনার প্রয়োজনীয়তার উপর নির্ভর করে। এটি ডিফল্টরূপে সেট করা হয়নি তাই এটি লেখকের হাতে। আপনি যদি নিশ্চিত হন যে স্ক্রিপ্টে ব্যবহৃত সমস্ত কমান্ডগুলি সর্বদা 0সাফল্যে ফিরে আসে এবং ব্যর্থতার পরে শূন্য হয় না তবে -eদরকারী তবে অন্য সব কিছু হিসাবে এটি সতর্কতার সাথে ব্যবহার করা উচিত।
আরকাদিউস দ্রবকিজিক

1
এই প্রসঙ্গে আপনি কেন সুপারিশ করা হয় তা ব্যাখ্যা করে আপনি উত্তরটি প্রসারিত করতে পারেন?
প্যাট্রিস এম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.