$ PATH পরিবর্তনশীল, লাইন বাই লাইন রফতানি করুন


22

আসকউবুন্টুতে এই প্রশ্নটি দ্বারা অনুপ্রাণিত ।

আপনার কাজ অত্যন্ত সহজ। PATH এনভায়রনমেন্ট ভেরিয়েবল ( echo $PATH) নিন এবং এটিকে এক্সপোর্ট করুন যাতে প্রতিটি প্রবেশ ( :অক্ষর দ্বারা পৃথক ) তার নিজস্ব লাইনে থাকে।

উদাহরণস্বরূপ, যদি PATH হয় /bin:/usr/bin:/usr/local/bin, আপনার প্রোগ্রামটি আউটপুট করা উচিত:

/bin
/usr/bin
/usr/local/bin

আপনার প্রোগ্রামটি কোনও শীর্ষস্থানীয় নিউলাইনটি ফিরিয়ে দিতে পারে না, তবে এটি একক পেছনের নতুন লাইনে ফিরে আসতে পারে। আপনার PATH সঠিক কিনা তা পরীক্ষা করার দরকার নেই বা ডিরেক্টরিটি বিদ্যমান। আপনার প্রোগ্রামটি কোনও ইনপুট নেবে না, এর অর্থ হল যে আপনার প্রোগ্রামটি PATH নিজেই পাওয়ার জন্য দায়বদ্ধ। আপনি নিরাপদে ধরে নিতে পারেন যে PATH- এ থাকা অবজেক্টগুলিতে কোনও নিউলাইন থাকে না :। যাইহোক, স্পেসগুলি ন্যায্য খেলা।

উপরোক্ত প্রশ্নের উত্তরে রেফারেন্স বাস্তবায়ন উপস্থিত রয়েছে।

বিধি

  • এটি (স্পষ্টতই) কোড-গল্ফ, তাই সংক্ষিপ্ত উত্তরটি মূল্যবান সবুজ চেকমার্ককে জিতবে।
  • অনুমোদিত উত্তরটি এটির বৈধতা নিশ্চিত করার জন্য পরীক্ষা করা হবে।
  • উভয় উইন্ডোজ এবং * নিক্স এন্ট্রি গ্রহণ করা হয়।
    • তবে আপনি যদি উইন্ডোজ স্পষ্টভাবে নির্দিষ্ট না করেন তবে আমি এটি লিনাক্সে চালানোর চেষ্টা করব এবং ব্যর্থ হব। (যদি এটি স্পষ্ট হয় (হাই, ব্যাচ!), আপনার স্পষ্টভাবে নির্দিষ্ট করার দরকার নেই।)
  • প্রতি উত্তরে কেবল একটি সমাধান রয়েছে। আপনার যদি একটি উইন্ডোজ এবং * নিক্স সংস্করণ উভয়ই থাকে তবে আমি সংক্ষিপ্তটিকে গণনা করব।
  • যদি দুটি উত্তরের দৈর্ঘ্য একই হয়, তবে আমি উচ্চতর ভোটের সাথে একটিকে অগ্রাধিকার দেব। যদি তাদের মোট ভোট একই হয় তবে আমি পুরানোটি গণনা করব। পোস্ট করা সময় যদি একই হয় তবে আমি দ্রুত কার্যকর করে এমন একটিকে বেছে নেব। তারা যদি একই পরিমাণে কার্যকর করে, আমি জানি না know

লিডারবোর্ড


আহা! কিছু গল্ফ টিপস না দিয়ে আস্ক উবুন্টু প্রশ্নটি দেখার পক্ষে কঠিন ছিল।
রোমান গ্রাফ

কিছু (শেল) উত্তর মনে হয়েছে যে পাথটিতে কোনও স্থান নেই। তাদের সংশোধন করা উচিত?
ডেনিস

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

একটি ফাংশন গ্রহণযোগ্য?
করভাস_192

@ Corvus_192 চ্যালেঞ্জটি স্পষ্টভাবে অন্যথায় না বললে, ফাংশনগুলি অনুমোদিত।
ডেনিস

উত্তর:


12

জেড শেল (zsh), 13 বাইট

<<<${(F)path}

$pathপ্যারামিটার ব্যবহার করে , যা শেল দ্বারা ব্যবহৃত একটি বিশেষ অ্যারে প্যারামিটার যা প্যারামিটারের সাথে আবদ্ধ থাকে $PATH, এবং একটি নতুন পংক্তির সাথে অ্যারে যোগ দিতে একটি প্যারামিটার এক্সপেনশন পতাকা


3
দৃশ্যত এক করে কেবল আউট-গলফ @Dennis ... হাহ।
wizzwizz4

কীভাবে এই শব্দটির কিছু নাম রাখি? আমি চেষ্টা করেছিলাম alias path="<<<${(F)path}"তবে এটি কার্যকর হলে প্রিন্ট হয় /usr/local/bin zsh: no such file or directory: /Library/Apple/usr/bin zsh: no such file or directory: /Library/Apple/binতারপরে যায়sbin
ড্যানিয়েল স্প্রিংগার

@ ড্যানিয়েলস্প্রিঞ্জার alias পাথটি প্রসারিত হচ্ছে ওরফে সংজ্ঞা চলাকালীন, যা আপনি চান না। পরিবর্তে একক উদ্ধৃতি ব্যবহার করুন:alias path='<<<${(F)path}'
গামা ফাংশন

@ গামা ফাংশন যে কাজ করেছে! কেন উদ্ধৃতি চিহ্ন হয়নি না কাজ করে?
ড্যানিয়েল স্প্রিঞ্জার

@ ড্যানিয়েলস্প্রিঞ্জ ব্যাখ্যা করার জন্য এখানে খুব বেশি জায়গা নেই, এখানে একটি পেস্টবিন রয়েছে: ix.io/1RyW
গামা ফাংশন

13

বাশ / কোরিটিলস, 17 16 বাইট

tr : '
'<<<$PATH

tr : '\n'<<<$PATHপাশাপাশি কাজ করা উচিত
Arnauld

এটা করে . । । এখনই সম্পাদনা করা হচ্ছে
সের্গেই কলডিয়াজহনি

আমি মনে করি আপনি আশেপাশের স্থানগুলিও সরাতে পারবেন <<<(কেবল উবুন্টুতে পরীক্ষা করা হয়েছে)
আর্নাউল্ড

@ আর্নল্ড আমি উবুন্টুকে একমাত্র জিনিস মনে করি না, এটি হ'ল বাশ জিনিস, তাই
ডিসট্রসগুলি

6
এটি কোনও বাইট সংরক্ষণ করে না, তবে \\nউদ্ধৃত ভেরিয়েবলের পরিবর্তে ব্যবহার করা আরও পঠনযোগ্য ইমো।
ডেনিস

10

ব্যাচ, 41 বাইট

@for %%a in ("%PATH:;=";"%")do @echo %%~a

PATHঅবশ্যই উইন্ডোজ সেমিকোলন-সীমাবদ্ধ। সুবিধার্থে, forসেমিকোলনগুলিতে ডিফল্টরূপে বিভক্ত হয় তবে অসুবিধে হয় , স্পেসেও তাই বিভক্ত হওয়ার আগে প্রতিটি স্ট্রিং উপাদানকে উদ্ধৃত করার জন্য আমাকে স্ট্রিং প্রতিস্থাপনের কৌশল ব্যবহার করতে হবে। এটি পরে অবশেষে উদ্ধৃতিগুলি অপসারণ করা অবশেষ।


1
কমান্ড লাইন থেকে চলমান আপনি 2 বাইট সংরক্ষণের %%সাথে প্রতিস্থাপন করতে পারেন %
ডেভিডপস্টিল

@ ডেভিডপস্টিল এটি কি কোনও প্রোগ্রামের চেয়ে কোড স্নিপেট তৈরি করবে না?
নিল

আমি নিশ্চিত না যে সঠিক কোড গল্ফের নিয়মগুলি কী, তবে অন্যান্য উত্তরগুলির বেশিরভাগটি কেবল স্নিপেটগুলিও নয়? তাদের বেশিরভাগের চালনার জন্য কিছু বিবরণের একটি "শেল" প্রয়োজন ...
ডেভিডপস্টিল

9

জেড শেল (zsh), 15 বাইট

<<<${PATH//:/
}

আপনি অরাজক গল্ফে কোডটি পরীক্ষা করতে পারেন : ব্যবহারের ফর্মটি ক্লিক করুন , জেডশ নির্বাচন করুন , কোডটি পেস্ট করুন এবং জমা দিন।

বাশ (খাঁটি), 19 বাইট

echo "${PATH//:/
}"

একই ধারণা, তবে বাশের কম গোলফি সিনট্যাক্স সহ। আইডিয়নে এটি পরীক্ষা করুন ।


6

পাওয়ারশেল, 20 বাইট

$env:PATH-split':'

সম্পাদনা:

  • -২ বাইট বন্ধ। টিমমিডকে ধন্যবাদ

পুরানো:

$env:PATH.split(":")

5

রুবি, 25 বাইট

puts ENV["PATH"].split":"

নাইস, অতি ক্ষুদ্র অংশ AskUbuntu উপর মূল প্রশ্নে আমার উত্তর চেয়ে খাটো
Sergiy Kolodyazhnyy

আপনার রুবি ডাকে গণনা করার দরকার নেই, কেবল প্রোগ্রাম নিজেই, সুতরাং এটি কেবল ২ 26 বাইট।
জর্ডান

@ জর্ডান এটি জানত না। এটা এফএকিউ মধ্যে আছে?
আনোয়ার

@ জর্ডান এটি ট্যুরেই দেখানো হয়েছে। সুতরাং, সম্পাদিত। বলার জন্য আপনাকে ধন্যবাদ
আনোয়ার

1
ওহ, আপনাকে পরিবর্তন করতে পারেন split ":"করতে split":"বা split ?:1 বাইট জন্য।
জর্ডান

4

পার্ল, 22 বাইট

say$ENV{PATH}=~y/:/
/r

প্রয়োজন -Eবা -M5.010চালানোর জন্য:

perl -E 'say$ENV{PATH}=~y/:/
/r'

3

বাশ + পাইথন, 43 বাইট

আসুন শেলের ভেরিয়েবল এক্সপেনশন ব্যবহার করি। এটি কলিংকে বাদ দেয় os.environ, এভাবে কম কোড এবং কম আমদানি হয়। এটি আমাদেরকে 46 বাইট দেয় এবং xnorকৌতুকের সাথে এবং স্থানটি সরানোর আগে -cআমরা 43 বাইট পেয়েছি।

python -c"print('$PATH'.replace(*':\n'))"

নোট করুন যে কোনও একক উদ্ধৃতি বা ব্যাকস্ল্যাশ সহ ডিরেক্টরি আপনার PATH এ উপস্থিত হলে এটি ব্যর্থ হয়।
জোয়ে মেরিয়েনার

@ জোয়ামিয়ারিয়ান যেহেতু ফাইলনাম / পাথ স্ট্রিংয়ে প্রায় কোনও চরিত্র থাকতে পারে, তবে হ্যাঁ - এটি ব্যর্থ হতে পারে এবং PATH '/ dir'1: / dir2' এ প্রসারিত হবে, যা পাইথনকে ভুলভাবে ফর্ম্যাট কমান্ড দেয়। ব্যাকস্ল্যাশ অগত্যা ব্যর্থ হয় না - এটি কেবল স্ট্রিংয়ে রয়েছে তা ব্যাখ্যা করে। আইএমএইচও, ব্যাকস্ল্যাশ পালানো সাধারণ ব্যবহারকারীর পাথের নামগুলিতে উপস্থিত হওয়া উচিত নয়, সুতরাং 99% ক্ষেত্রে এটি ঠিক আছে is তবে আমি সম্মত - এই ক্ষেত্রে যেমন আপনি সরাসরি বা অপ্রত্যক্ষভাবে শেলের সাথে লেনদেন করেন তখন এটিকে মাথায় রাখা উচিত
সের্গি কলডায়াজিনি

3

জাভা, 58 বাইট

System.out.print(System.getenv("Path").replace(';','\n'));

সম্পূর্ণ প্রোগ্রাম: 106 বাইট

class E {
    public static void main (String[] args) {
        System.out.print(System.getenv("Path").replace(';', '\n'));
    }
}

3

GNU sed+ bash, 25 বাইট:

sed 's/:/\n/g' <<<"$PATH"

যদি PATHহোয়াইটস্পেসের সাথে কোনও ডিরেক্টরি নাম না থাকে, কোনও উদ্ধৃতি প্রয়োজন নেই, 23 বাইট:

sed 's/:/\n/g' <<<$PATH

এমনকি ছোট, :নতুন লাইনে অনূদিত , @ ডেনিসকে ধন্যবাদ :

sed y/:/\\n/<<<"$PATH"

3

ভিম, 19 বাইট

"=$PATH<CR>p:s/:/\r/g<CR>

$PATHএক্সপ্রেশন রেজিস্টার থেকে গ্র্যাব করুন এবং এটি পেস্ট করুন। চালু করুন :নতুন লাইন মধ্যে গুলি। কিছুই জটিল।


তাদের এটি ভিম টিউটোরিয়ালে রাখা উচিত। কেউ কীভাবে ভিমে প্রবেশ করবেন সে সম্পর্কে পড়তে আমি এই উদাহরণটির প্রশংসা করি।
loa_in_

2

পিএইচপি, 36 35 33 32 বাইট

1 টি বাইট সংরক্ষণ করা হয়েছে, ব্ল্যাকহোল
2 বাট সেভডকে ধন্যবাদ, ব্যবহারকারীর জন্য ধন্যবাদ 59178 1 বাইট সংরক্ষণ করেছে, মার্টিজকে
ধন্যবাদ

* নিক্স সংস্করণ

<?=strtr(getenv(PATH),":","
")?>

উইন্ডোজ সংস্করণ

<?=strtr(getenv(PATH),";","
")?>

1
@ রোমানগ্রাফ *nixহ'ল ইউনিক্সের মতো সিস্টেমের উল্লেখ করার এক উপায় ।
আর্নৌল্ড

1
যদি আপনি একটি "মাল্টি-প্লাটফর্ম" সংস্করণ চান তবে আপনি ধ্রুবকটি ব্যবহার করতে পারেনPATH_SEPARATOR
ইসমাইল মিগুয়েল

1
\nপরিবর্তে একটি সত্য নিউলাইন ব্যবহার করবেন না , এটি আপনাকে একটি বাইট সংরক্ষণ করবে।
ব্ল্যাকহোল 18

1
আপনি "এস প্রায় কাছাকাছি ড্রপ করতে পারেন PATH। আপনি একটি "অপরিজ্ঞাত ধ্রুবক ব্যবহার" বিজ্ঞপ্তি পেয়েছেন তবে এটি এখনও আপনাকে কার্যকর করে 2 বাইট সংরক্ষণ করে।
ব্যবহারকারী59178

1
সংক্ষিপ্ত প্রতিধ্বনি <?=strtr(getenv(PATH),":","")?>নিরাপদ করে একটি বাইট (মন্তব্যগুলিতে নতুন লাইনে দাঁড়াতে পারে না)
মার্টিজন

2

পাইথন 2, 49 বাইট

@ এসএনজিআর এবং @ অলিভারকে ধন্যবাদ environদিয়ে প্রতিস্থাপন করে 2 বাইট সংরক্ষণ করাgetenv

import os
print os.getenv('PATH').replace(*':\n')

পাইথন 3 এর জন্য, যুক্তির চারপাশে কেবল যুক্ত করুন (এবং বাইট গণনায় 1 যুক্ত করুন।)print


এটি কীভাবে ইনপুট পাবে?
আনোয়ার

2
ওস.এনভায়ার ['पथ'] থেকে আনোয়ার @ এই স্ট্রিংটি ফিরিয়ে দেবে
সের্গি কোলোডিয়াজনি

1
@ সার্গ আহ। বুঝেছি.
আনোয়ার

2
replaceপ্যাক আর্গুমেন্ট নিতে পারেন replace(*':\n')
xnor

3
@ কার্লনাপ্ফ হ্যাঁ, মূল বিষয়টি। এই প্রোগ্রামটি পাইথন 3 তে চলবে না, সুতরাং এটির সাথে কাজ করা সংস্করণটি আপনার নির্দিষ্ট করা উচিত।
ডেনকার


1

রেকেট 39 বাইট

@ হেইমাইলের সেড কমান্ড ব্যবহার করে:

(system "sed 's/:/\\n/g' <<<\"$PATH\"")

Ungolfed:

(define (f)
  (system "sed 's/:/\\n/g' <<<\"$PATH\"")
)

পরীক্ষা:
(চ)

আউটপুট:

/usr/local/bin
/usr/bin
/bin
/usr/games
/usr/lib/java/bin
/usr/lib/java/jre/bin
#t

1

স্কালা, 31 বাইট

sys env "PATH"replace(':','\n')

স্কেলে, a b cসিনট্যাকটিক চিনির জন্য a.b(c), তাই এটি সংকলন করেsys.env("PATH").replace(':','\n')



1

সি #, 64 বাইট

x=>Environment.GetEnvironmentVariable("PATH").Replace(";","\n");

বেনামে ফাংশন যা পাথ পরিবর্তনশীল, প্রতিটি ডিরেক্টরি পৃথক লাইনে দেয় returns দ্রষ্টব্য যে xব্যবহারের পরিবর্তে 1 বাইট সংরক্ষণ করার জন্য এটি একটি ডামি অবজেক্ট()

সম্পূর্ণ প্রোগ্রাম:

using System;

namespace ExportPathVariable
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<object,string>f= x=>Environment.GetEnvironmentVariable("PATH").Replace(";","\n");

            Console.WriteLine(f(0));
        }
    }
}

ইউনিক্স সিস্টেমগুলিতেও কাজ করে যদি আপনি এর সাথে প্রতিস্থাপন ;করেন তবে :অনুমান করা হয় যে মনো লাইব্রেরিগুলি উপলব্ধ। আইডিয়োনে এটি অনলাইনে চেষ্টা করুন নেট ফিডল একটি সুরক্ষা ব্যতিক্রম ফিরিয়ে দেয়।

বিকল্পভাবে, একটি সম্পূর্ণ সি # প্রোগ্রাম, যা বরং ভার্বোস:


সি #, 118 বাইট

using System;class P{static void Main(){Console.Write(Environment.GetEnvironmentVariable("PATH").Replace(";","\n"));}}

1

হাস্কেল, 72 বাইট

import System.Environment
m ':'='\n'
m x=x 
map m<$>getEnv"PATH">>=putStr

একটি ব্যয়বহুল আমদানি এবং replaceস্ট্যান্ডার্ড লাইব্রেরির মধ্যে কোনও এটি বেশ দীর্ঘ করে তোলে।


নিশ্চয়ই m ':'...সেই জায়গার দরকার নেই?
বিড়াল

1
@ কেট: স্থানটি বাধ্যতামূলক, কারণ 'শনাক্তকারীদের মধ্যে এটি একটি বৈধ অক্ষর। স্থান ব্যতীত আমরা একটি ফাংশন সংজ্ঞায়িত করব m'
নিমি

1

সি (x86), 60 বাইট

f(){char*p=getenv("PATH");for(;*p;p++)putchar(*p-58?*p:10);}

এটি stdlib.h টি ব্যতীত 64৪ -বিট প্ল্যাটফর্মগুলিতে কাজ করবে না , যেহেতু গেটেনভ একটি ইনট (32 বিট) প্রদান করে যখন চর পয়েন্টারগুলি 64 বিট প্রশস্ত।

আমি এখনও একটি অনলাইন 32-বিট সি সংকলক খুঁজে পাইনি।

সি (x86-64), 70 বাইট

f(){char*getenv(),*p=getenv("PATH");for(;*p;p++)putchar(*p-58?*p:10);}

সহ পরিবর্তে stdlib.h , আমরা ঘোষণা getenv একটি ফিরতি একটি ফাংশন হিসাবে নিজেদেরকে গৃহস্থালির কাজ পয়েন্টার।

আমি এটি জিসিসি এবং লিনাক্সের মধ্যে ঝনঝন করে পরীক্ষা করেছি; অন্য সেটআপগুলি রক্ত ​​কাঁদতে পারে। আইডিয়নে চেষ্টা করে দেখুন ।


1

ফ্যাক্টর , 28 বাইট

ইউনিক্স-পছন্দ জন্য। উইন্ডোজে এটি কীভাবে করব তা আমি জানিনা যেহেতু আমি উইন্ডোজ বাক্সে নেই।

"PATH"getenv ":" "\n"replace

1

jq, 18 টি অক্ষর

(১ characters টি অক্ষরের কোড + ২ অক্ষর কমান্ড লাইন বিকল্প)

env.PATH/":"|.[]

নমুনা রান:

bash-4.3$ PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'

bash-4.3$ jq -nr 'env.PATH/":"|.[]'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

1

ওওক, 51 44 টি অক্ষর

BEGIN{$0=ENVIRON["PATH"];gsub(":",RS);print}

ধন্যবাদ:

  • gsub()অন্তর্নির্মিত ভেরিয়েবলগুলি (-7 অক্ষর) ব্যবহারের পরিবর্তে ব্যবহারের পরামর্শ দেওয়ার জন্য নিনজালজ

সাধারণ উপায়টি হ'ল awkবিল্ট-ইন ভেরিয়েবলগুলি সেট আপ করা যা কীভাবে awkডেটা স্বয়ংক্রিয়ভাবে ম্যানিপুলেট করে তা প্রভাবিত করে:

BEGIN{FS=":";OFS=RS;$0=ENVIRON["PATH"];$1=$1;print}

নমুনা রান:

bash-4.3$ PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'

bash-4.3$ awk 'BEGIN{FS=":";OFS=RS;$0=ENVIRON["PATH"];$1=$1;print}'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

ডোহ। আপনি ঠিক বলেছেন, @ নিনজালজ। আমি এটি awkস্পেসিফিক উপায়ে করার দিকে মনোনিবেশ করেছিলাম । ধন্যবাদ.
manatwork

0

নোড.জেএস, 36 বাইট

_=>process.env.PATH.split`:`.join`
`

অনেকটাই অকপট.


0

ম্যাটল্যাব, 34 বাইট

disp(strrep(getenv('PATH'),58,10))

অষ্টাভে সামান্য পরিবর্তন সহ এখানে একটি অনলাইন ডেমো রয়েছে কারণ অষ্টকটিতে সংখ্যার মানগুলির পরিবর্তে strrepদ্বিতীয় এবং তৃতীয় ইনপুটগুলির charপরিবর্তনশীল হওয়া দরকার।




0

Gema, 36 টি অক্ষর

\A=@subst{\\:=\\n;@getenv{PATH}}@end

নমুনা রান:

bash-4.3$ PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'

bash-4.3$ gema '\A=@subst{\\:=\\n;@getenv{PATH}}@end'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

0

বেফঞ্জ -৮৮ + ইভিআর ফিঙ্গারপ্রিন্ট, 34 বাইট

"RAVE"4("HTAP"Gv
:!k@:':-!'0*-, >

"RAVE"4(সহজেই পরিবেশের ভেরিয়েবলগুলি অ্যাক্সেস করতে ইভিআর ফিঙ্গারপ্রিন্ট ( ) লোড করে , PATH এনভ্বর ( "HTAP"G) পায় এবং প্রতিটি চরিত্রের জন্য, চরিত্রটি "\ 0" ( :!k@) হলে প্রোগ্রামটি প্রস্থান করে , চরটি ASCII 58 হলে ASCII 48 "0" কে সরিয়ে দেয় ":" ( :':-!'0*-), এবং ( ,) অক্ষরকে আউটপুট করে ।


0

ইএলএফ / x86, 78 বাইট

00000000  7f 45 4c 46 01 00 00 00  43 0f 00 00 43 5f eb 10  |.ELF....C...C_..|
00000010  02 00 03 00 0c 50 eb 10  0c 50 eb 10 04 00 00 00  |.....P...P......|
00000020  5f 5f b1 05 be 49 50 eb  10 3d 20 00 01 00 5f f3  |__...IP..= ..._.|
00000030  a6 75 ef 89 f9 80 3f 3a  75 03 80 2f 30 42 ae 75  |.u....?:u../0B.u|
00000040  f4 4a 04 04 cd 80 93 cd  80 50 41 54 48 3d        |.J.......PATH=|
0000004e

এনএএসএম উত্স:

BITS 32                                         ;
ORG 0x10eb5000                                  ;
                                                ;   ELF HEADER    --   PROGRAM HEADER
; ELF HEADER                                    ; +-------------+
DB 0x7f,'E','L','F'                             ; | magic       |    +--------------------+
                                                ; |             |    |                    |
; PROGRAM HEADERS                               ; |             |    |                    |
DD 1                                            ; |*class   32b | -- | type: PT_LOAD      |
                                                ; |*data   none |    |                    |
                                                ; |*version   0 |    |                    |
                                                ; |*ABI    SysV |    |                    |
DD 0xf43        ; offset = vaddr & (PAGE_SIZE-1); |*ABI vers    | -- | offset             |
                                                ; |             |    |                    |
entry:  inc     ebx     ; STDOUT_FILENO         ; |*PADx7       | -- | vaddr = 0x10eb5f43 |
        pop     edi     ; discard argc          ; |             |    |                    |
        jmp     short skip                      ; |             |    |                    |
DW 2                                            ; | ET_EXEC     | -- |*paddr LO           |
DW 3                                            ; | EM_386      | -- |*paddr HI           |
DD 0x10eb500c                                   ; |*version     | -- | filesz             |
DD 0x10eb500c                                   ; | entry point | -- | memsz              |
DD 4                                            ; | ph offset   | -- | flags: RX          |
                                                ; |             |    |                    |
skip:   pop     edi     ; discard argv[0]       ; |*sh offset   | -- |*align              |
        pop     edi     ; discard argv[1]=NULL  ; |             |    |                    |
env:    mov     cl,5    ; \ strlen("PATH=")     ; |             |    |                    |
        mov     esi,PATH; > "PATH="             ; |*flags    /--|    |                    |
DB 0x3d         ; cmp eax,0x10020               ; |*ehsize      |    +--------------------+
DW 32                                           ; | phentsize   |
DW 1                                            ; | phnum       |
                                                ; |             |
        pop     edi     ; > envp                ; |*shentsize   |
        repe    cmpsb   ; > strcmp(envp,"PATH="); |*shnum       |
        jne     env     ; /                     ; |*shstrndx    |
        mov     ecx,edi                         ; +-------------+

nlcolon:cmp     byte[edi],58  ; \ if (char == ':')
        jne     nosub         ; >
        sub     byte[edi],48  ; >   char -= '0'
nosub:  inc     edx           ; > wlen++
        scasb                 ; >
        jne     nlcolon       ; / while(char != 0)

        dec     edx           ; wlen--
        add     al,4
        int     0x80          ; write(1, ecx, wlen)
        xchg    eax,ebx
        int     0x80          ; exit(...)

PATH: db "PATH="
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.