শেল থেকে অ্যাপ্লিকেশনটি কীভাবে "সঠিকভাবে" শুরু করা যায়


21

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

আমি শেল থেকে প্রক্রিয়াগুলি স্পন করার জন্য নিম্নলিখিত উপায়গুলি সম্পর্কে জানি:

  1. exec /path/to/Program একটি নতুন প্রক্রিয়া তৈরি না করে নির্দিষ্ট কমান্ডের সাথে শেলটি প্রতিস্থাপন করুন
  2. sh -c /path/to/Program শেল নির্ভর প্রক্রিয়া আরম্ভ করুন
  3. /path/to/Program শেল নির্ভর প্রক্রিয়া আরম্ভ করুন
  4. /path/to/Program 2>&1 & শেল স্বাধীন প্রক্রিয়া প্রবর্তন
  5. nohup /path/to/Program & শেল স্বাধীন প্রক্রিয়া আরম্ভ করুন এবং আউটপুট পুনর্নির্দেশ nohup.out

আপডেট 1: আমি উদাহরণ দিয়ে বলতে পারি যে উদাহরণগুলি dmenuবারবার কল থেকে ps -eflবিভিন্ন অবস্থার অধীনে এটি পুনর্গঠন করে does এটি একটি নতুন শেল /bin/bashএবং এই শেলটির শিশু হিসাবে অ্যাপ্লিকেশনটি তৈরি করে /path/to/Program। বাচ্চা এতক্ষণ যতক্ষণ থাকে ততক্ষণ শেল চারপাশে থাকবে। যদি আপনি সমস্যা (এটা কিভাবে পরিচালনা করে এই আমাকে পরলোক হল ...) বিপরীতে nohup /path/to/Program &একটি শেল থেকে /bin/bashতারপর প্রোগ্রাম এই শেল সন্তান হয়ে যাবে কিন্তু আপনি যদি এই শেল থেকে প্রস্থান প্রোগ্রামের পিতা বা মাতা সর্বোচ্চে প্রক্রিয়া হতে হবে। সুতরাং যদি প্রথম প্রক্রিয়াটি উদাহরণস্বরূপ ছিল /sbin/init verboseএবং এটির PPID 1পরে এটি প্রোগ্রামটির পিতামাতা হবে। এখানে কি আমি একটি গ্রাফ ব্যবহার ব্যাখ্যা করার চেষ্টা করে: chromiumচালু করা হয় মাধ্যমে dmenu, firefoxব্যবহার চালু করা হয় exec firefox & exit:

systemd-+-acpid
        |-bash---chromium-+-chrome-sandbox---chromium-+-chrome-sandbox---nacl_helper
        |                 |                           `-chromium---5*[chromium-+-{Chrome_ChildIOT}]
        |                 |                                                    |-{Compositor}]
        |                 |                                                    |-{HTMLParserThrea}]
        |                 |                                                    |-{OptimizingCompi}]
        |                 |                                                    `-3*[{v8:SweeperThrea}]]
        |                 |-chromium
        |                 |-chromium-+-chromium
        |                 |          |-{Chrome_ChildIOT}
        |                 |          `-{Watchdog}
        |                 |-{AudioThread}
        |                 |-3*[{BrowserBlocking}]
        |                 |-{BrowserWatchdog}
        |                 |-5*[{CachePoolWorker}]
        |                 |-{Chrome_CacheThr}
        |                 |-{Chrome_DBThread}
        |                 |-{Chrome_FileThre}
        |                 |-{Chrome_FileUser}
        |                 |-{Chrome_HistoryT}
        |                 |-{Chrome_IOThread}
        |                 |-{Chrome_ProcessL}
        |                 |-{Chrome_SafeBrow}
        |                 |-{CrShutdownDetec}
        |                 |-{IndexedDB}
        |                 |-{LevelDBEnv}
        |                 |-{NSS SSL ThreadW}
        |                 |-{NetworkChangeNo}
        |                 |-2*[{Proxy resolver}]
        |                 |-{WorkerPool/1201}
        |                 |-{WorkerPool/2059}
        |                 |-{WorkerPool/2579}
        |                 |-{WorkerPool/2590}
        |                 |-{WorkerPool/2592}
        |                 |-{WorkerPool/2608}
        |                 |-{WorkerPool/2973}
        |                 |-{WorkerPool/2974}
        |                 |-{chromium}
        |                 |-{extension_crash}
        |                 |-{gpu-process_cra}
        |                 |-{handle-watcher-}
        |                 |-{inotify_reader}
        |                 |-{ppapi_crash_upl}
        |                 `-{renderer_crash_}
        |-2*[dbus-daemon]
        |-dbus-launch
        |-dhcpcd
        |-firefox-+-4*[{Analysis Helper}]
        |         |-{Cache I/O}
        |         |-{Cache2 I/O}
        |         |-{Cert Verify}
        |         |-3*[{DOM Worker}]
        |         |-{Gecko_IOThread}
        |         |-{HTML5 Parser}
        |         |-{Hang Monitor}
        |         |-{Image Scaler}
        |         |-{JS GC Helper}
        |         |-{JS Watchdog}
        |         |-{Proxy R~olution}
        |         |-{Socket Thread}
        |         |-{Timer}
        |         |-{URL Classifier}
        |         |-{gmain}
        |         |-{localStorage DB}
        |         |-{mozStorage #1}
        |         |-{mozStorage #2}
        |         |-{mozStorage #3}
        |         |-{mozStorage #4}
        |         `-{mozStorage #5}
        |-gpg-agent
        |-login---bash---startx---xinit-+-Xorg.bin-+-xf86-video-inte
        |                               |          `-{Xorg.bin}
        |                               `-dwm-+-dwmstatus
        |                                     `-xterm---bash-+-bash
        |                                                    `-pstree
        |-systemd---(sd-pam)
        |-systemd-journal
        |-systemd-logind
        |-systemd-udevd
        |-wpa_actiond
        `-wpa_supplicant

আপডেট 2: আমি অনুমান করি যে প্রশ্নটি এ পর্যন্ত সিদ্ধ করা যেতে পারে: একটি প্রক্রিয়াটির পিতামাতার কী হওয়া উচিত? এটি উদাহরণস্বরূপ একটি শাঁস হওয়া উচিত বা এটি initপ্রক্রিয়া হওয়া উচিত প্রক্রিয়া সহ PID 1?


3
আপনার প্রশ্নের সংক্ষিপ্ত উত্তরটি হ'ল "আপনি যা ফলাফল চান তা পান"।
ওয়েইন ওয়ার্নার

1
ডাং, আবর্জনা - আপনি কিছু ভাল প্রশ্ন জিজ্ঞাসা। তবে আমি মনে করি ওয়েন এখানে নাকের উপরে রয়েছে - আপনার সর্বশেষ সম্পাদনাটি সম্পর্কে জিজ্ঞাসা করেছে init- যার উত্তরটি হতে পারে ... সম্ভবত? এটি কীভাবে / যদি আপনি এটির সাথে কথা বলার পরিকল্পনা করেন, initআপনি কী ব্যবহার করেন এবং ডেটা চ্যানেলগুলি কোথায় তা নির্ভর করে depends সাধারণভাবে সেই জিনিসগুলি নিজেই কাজ করার প্রবণতা রাখে - এটাই তার initজন্য। যে কোনও ক্ষেত্রে, সাধারণত যখন আপনি তখন কোনও প্রক্রিয়াটি ডিমনাইজ করেন init। অথবা আপনি যদি চাকরি নিয়ন্ত্রণ চান, বর্তমান শেল।
মাইকজার্ভ

হাহাহা, চিয়ার্স @ মাইক্রোভার; এখানে সকাল 4:37 সকাল এবং ইতিমধ্যে দিনের প্রথম হাসি। সত্য, এটি স্টাফ সর্বদা কোনওরকম কার্যকর হয়। আমি সরিয়ে ফেলব dmenuএবং যা শিখেছি তার সাথে আমি কীভাবে এগিয়ে যাব তা দেখব। আমি খুঁজে পেতে exec /path/to/Program & exitবা /bin/bash -c /path/to/Program & exitবেশ ব্যবহারযোগ্য হতে হবে। তবে তারা সকলেই 1অর্থাত্‍ initএর পিতামাতার Programসাথে আমার পক্ষে ঠিক আছে যতক্ষণ না এটি বোধগম্য হয় এবং কোনও মৌলিক *nixনীতি লঙ্ঘন করে না ।
প্রভু.গারবাজে

@ প্রভু.গারবাজে - এটি কারণ আপনি exec &, আমার মনে হয়। আমি সাধারণত টার্মিনাল থেকে আমার জিনিসগুলি করি ... সম্ভবত আপনি এখানে বেন ক্রলের প্রশ্ন থেকে কিছুটা উপকার পাবেন । আমার সেখানে একটি উত্তর আছে, তবে তাদের সবগুলি খুব ভাল। যাইহোক, আপনি যখন কোনও প্রক্রিয়া ব্যাকগ্রাউন্ড করেন এবং এর পিতামাতার মতো মারা যায়: sh -c 'cat & kill $$'আপনি এটি অনাথ হন, এবং এটি শেষ পর্যন্ত কাটা পেতে শুরু করে। এটাই ইনিশের কাজ - এজন্য তারা সকলেই এতে পড়ে fall
মাইকজার্ভ

হয়তো এখন জন্য সহজ প্রশ্ন হচ্ছে, এটা কি করে সম্ভব শেল থেকে উপরে প্রক্রিয়া গাছ পেতে: systemd--bash--chromium। আমি systemd--chromiumযখন শেল থেকে ফায়ার ফক্স স্প্যান করি তখন সমস্ত পদ্ধতি যা আমি চেষ্টা করি তা শেষ পর্যন্ত নীচের ফর্মের একটি প্রক্রিয়া গাছের দিকে নিয়ে যায় । শেলটি এখানে কীভাবে তৈরি হয়? এটি কোনও টার্মিনালের সাথে সম্পর্কিত নয়।
প্রভু.গারবাজে

উত্তর:


7

ঠিক আছে, আপনার কাছে এটির সম্পর্কে বেশ ভাল ধারণা রয়েছে বলে মনে হয়। আপনার কাছে যা আছে তার কিছু পরিষ্কার করতে,

  • sh -c /path/to/Program মোটামুটি অনুরূপ

    $ sh 
    % / পাথ / থেকে / প্রোগ্রাম 
    % Ctrl+ D                             (বা আপনি " প্রস্থান " টাইপ করতে পারেন " ) 
    $

    আপনি যেখানে নতুন শেল প্রক্রিয়া শুরু করবেন, নতুন শেলটিতে অ্যাপ্লিকেশন কমান্ডের পথ সরবরাহ করুন এবং তারপরে নতুন শেলটি সমাপ্ত হতে দিন। আমি চিত্রটির উদ্দেশ্যে নতুন শেলটিকে আলাদা প্রম্পট দিচ্ছি; এটি সম্ভবত বাস্তব জীবনে ঘটবে না। তাই তারা একটি একক কমান্ড (একটি একক-ব্যবহার নামহীন স্ক্রিপ্ট সাজানোর) মত চেহারা কনস্ট্রাক্ট, বেশিরভাগ একটি বান্ডিল একাধিক কমান্ড মোড়কে মত চতুর স্টাফ করছেন, জন্য দরকারী, বা শেল ভেরিয়েবল থেকে সম্ভবত জটিল কমান্ড ভবন। আপনি এটিকে সহজেই কোনও যুক্তি (গুলি) সহ একক প্রোগ্রাম চালানোর জন্য ব্যবহার করবেন না।sh -c "command"

  • 2>&1মানে স্ট্যান্ডার্ড ত্রুটিটি স্ট্যান্ডার্ড আউটপুটে পুনর্নির্দেশ। এর সাথে আসলে কিছুই করার নেই& ; পরিবর্তে, আপনি এটি ব্যবহার করেন যখন কোনও কমান্ড স্ক্রিনে ত্রুটি বার্তা প্রেরণ করে এমনকি আপনি যদি বলেন এবং আপনি ফাইলটিতে ত্রুটি বার্তাগুলি ক্যাপচার করতে চান।command > file
  • আউটপুটকে পুনঃনির্দেশিত করা nohup.outএর একটি তুচ্ছ পার্শ্ব-প্রতিক্রিয়া nohup। এর প্রাথমিক উদ্দেশ্য হ'ল অবিচ্ছিন্নভাবে চালানো (সাধারণত "ব্যাকগ্রাউন্ডে" হিসাবে পরিচিত, বা "শেল স্বতন্ত্র প্রক্রিয়া হিসাবে পরিচিত, আপনার শব্দগুলি ব্যবহার করা) এবং এটি কনফিগার করা যাতে আপনি চালিয়ে যেতে সক্ষম হওয়ার আরও ভাল সুযোগ থাকে যদি আপনি চালনা করেন কমান্ডটি চলমান অবস্থায় শেলটি বন্ধ করুন (উদাঃ লগআউট)।nohup command &command

bash(1)এবং বাশ রেফারেন্স ম্যানুয়াল হ'ল তথ্যের উত্স।


7

কোনও প্রোগ্রাম কার্যকর করতে এবং এটি একটি টার্মিনাল থেকে বিচ্ছিন্ন করার কয়েকটি উপায় রয়েছে। একটি হ'ল এটি একটি সাব-শেলের পটভূমিতে এটি চালানো , ( firefoxআপনার প্রিয় প্রোগ্রামের সাথে প্রতিস্থাপন করুন ):

(firefox &)

আর একটি হ'ল প্রক্রিয়াটি অস্বীকার করা:

firefox & disown firefox

আপনার সম্পর্কে কিভাবে অ্যাপ লঞ্চার কাজ, অদ্ভুত হন dmenu: 1 বাইনারি প্রদান করে এবং 2 শেল স্ক্রিপ্ট dmenu, dmenu_pathএবং dmenu_runযথাক্রমে।

dmenu_runপাইপগুলি dmenu_pathডেমেনুতে আউটপুট দেয়, যার ফলে পাইপগুলি আপনার $SHELLপরিবর্তনশীলকে যাই সেট করে দেয় into এটি খালি থাকলে, এটি ব্যবহার করবে /bin/sh

#!/bin/sh
dmenu_path | dmenu "$@" | ${SHELL:-"/bin/sh"} &

dmenu_pathকিছুটা জটিল, তবে সংক্ষেপে এটি আপনার $PATHপরিবেশে পরিবর্তনশীল বাইনারিগুলির একটি তালিকা সরবরাহ করে এবং সম্ভব হলে ক্যাশে ব্যবহার করে।

#!/bin/sh
cachedir=${XDG_CACHE_HOME:-"$HOME/.cache"}
if [ -d "$cachedir" ]; then
        cache=$cachedir/dmenu_run
else
        cache=$HOME/.dmenu_cache # if no xdg dir, fall back to dotfile in ~
fi
IFS=:
if stest -dqr -n "$cache" $PATH; then
        stest -flx $PATH | sort -u | tee "$cache"
else
        cat "$cache"
fi

শেলগুলিতে অনুষ্ঠানগুলি চালানোর প্রয়োজন নেই। dmenu_runশেলের মধ্যে পাইপ না করে লেখার আরেকটি উপায় হ'ল:

#!/bin/sh
$(dmenu_path | dmenu "$@") &

6

আমি জি ম্যান এর উত্তর অনেক পছন্দ করি। তবে আমি প্রতিক্রিয়া জানাচ্ছি কারণ আমি মনে করি আপনি উদ্বেগজনক উদ্বেগ করছেন। ওয়েন যেমন উল্লেখ করেছেন, সর্বোত্তম উত্তরটি হ'ল "আপনি যা চান ফলাফল যা পান"।

ইউনিক্স প্রক্রিয়া পরিচালনায়, প্রতিটি প্রক্রিয়ার একটি প্যারেন্ট থাকে। এর ব্যতিক্রম একটিinit প্রক্রিয়া যা ওএস বুট-এ শুরু করে। পিতামাতার প্রক্রিয়াটি মারা যাওয়ার সাথে সাথে তার সমস্ত শিশু প্রক্রিয়াটি নিয়ে যাওয়া স্বাভাবিক আচরণ। এটি সমস্ত শিশু প্রক্রিয়াগুলিতে SIGHUP সিগন্যাল প্রেরণ দ্বারা করা হয়; SIGHUP- র ডিফল্ট হ্যান্ডলিং প্রক্রিয়াটি সমাপ্ত করে।

আপনি যদি নিজের পছন্দের ভাষায় কাঁটাচামচ (2) / এক্সিকিউটিভ (3) কল কোড করেন তবে ব্যবহারকারীর প্রক্রিয়াগুলির শেল স্প্যানিং এর চেয়ে আলাদা নয় । শেলটি আপনার পিতামাতার, এবং যদি শেলটি সমাপ্ত হয় (উদাহরণস্বরূপ, আপনি লগ অফ করেন), তবে শিশু প্রসেস (এস) এর সাথে এটি প্রসারিত হয়। আপনি যে ঘনত্বগুলি বর্ণনা করেছেন তা হ'ল আচরণটি সংশোধন করার উপায় ways

exec /path/to/programএক্সেকে কল করার মতো (3) । হ্যাঁ, এটি আপনার শেলটি প্রতিস্থাপন করবে program, পিতা-মাতার যে শেলটি চালু হয়েছিল তা রেখে।

sh -c /path/to/programধরণের অর্থহীনভাবে একটি শিশু শেল প্রক্রিয়া তৈরি করে যা একটি শিশু প্রক্রিয়া তৈরি করবে program। এটি কেবল তখনই মূল্যবান যখন /path/to/programস্ক্রিপ্ট নির্দেশাবলীর ক্রম হয়, এবং এক্সিকিউটেবল ফাইল নয়। ( sh /path/to/script.shএকটি নিকৃষ্ট শেল এ চালানো অনুমতি অনুপস্থিত একটি শেল স্ক্রিপ্ট চালানোর জন্য ব্যবহার করা যেতে পারে)

/path/to/programএকটি "অগ্রভাগ" প্রক্রিয়া তৈরি করে যার অর্থ শেলটি অন্য কোনও পদক্ষেপ নেওয়ার আগে প্রক্রিয়াটি সমাপ্ত হওয়ার জন্য অপেক্ষা করে। সিস্টেম কল প্রসঙ্গে, এটা ভালো হয় কাঁটাচামচ (2) / Exec (3) / waitpid (2) । নোট করুন যে সন্তানের পিতা-মাতার কাছ থেকে স্ট্ডিন / স্টাডাউট / স্ট্ডার উত্তরাধিকার সূত্রে প্রাপ্ত।

/path/to/program &(পুনঃনির্দেশ উপেক্ষা করে) একটি "পটভূমি প্রক্রিয়া" তৈরি করে। প্রক্রিয়াটি এখনও শেলের একটি শিশু, তবে পিতামাতার এটি শেষ হওয়ার অপেক্ষা করছে না।

nohup /path/to/programপূজা nohup (1) থেকে SIGHUP পাঠানোর প্রতিরোধ programযদি নিয়ন্ত্রণকারী টার্মিনাল বন্ধ করা হয়। এটি অগ্রভাগ বা ব্যাকগ্রাউন্ডে হোক না কেন একটি পছন্দ (যদিও বেশিরভাগ সাধারণভাবে প্রক্রিয়াটি ব্যাকগ্রাউন্ড হয়)। nohup.outআপনি যদি অন্যথায় স্টডআউট পুনর্নির্দেশ না করেন তবে এটি কেবলমাত্র আউটপুট Note

আপনি যখন পটভূমিতে কোনও প্রক্রিয়া রাখেন, পিতামাতার প্রক্রিয়াটি মারা গেলে দুটি জিনিসের একটি ঘটে। অভিভাবকরা যদি একটি নিয়ন্ত্রণকারী টার্মিনাল হয় তবে সাইনআপ বাচ্চাদের কাছে প্রেরণ করা হবে। যদি এটি না হয় তবে প্রক্রিয়াটি "অনাথ" হতে পারে এবং initপ্রক্রিয়াটি উত্তরাধিকার সূত্রে প্রাপ্ত হয় ।

আপনি যখন ইনপুট / আউটপুট / ত্রুটি পুনর্নির্দেশ করেন, আপনি প্রতিটি ফাইলকে তার পিতামাতার কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত উত্তরাধিকারীর চেয়ে পৃথক পৃথক ফাইলের সাথে সংযুক্ত করে যাচ্ছেন। এর কোনওটিই প্রক্রিয়াটির মালিকানা বা গাছের গভীরতার উপর প্রভাব ফেলবে না (তবে পটভূমি প্রক্রিয়াগুলির জন্য টার্মিনাল থেকে সমস্ত 3 টি পুনর্নির্দেশ করা সর্বদা বুদ্ধিমান হয়)

যা যা বলেছিল তার সাথে, আমি মনে করি না শেল বা সাব-শেলস বা উপ-প্রক্রিয়াগুলির দ্বারা প্রক্রিয়া তৈরির সাথে আপনার সংশ্লিষ্ট হওয়া উচিত, যদি না আপনি প্রক্রিয়া পরিচালনার সাথে সম্পর্কিত কোনও নির্দিষ্ট সমস্যা না দেখায়।


নিতপিক: sh -c /path/to/programযদি এটি এক্সিকিউটেবল বিটগুলি অনুপস্থিত হয় তবে শেল স্ক্রিপ্ট হিসাবে প্রোগ্রামটি পরিচালনা করবে না sh /path/to/programwill sh -c /path/to/programকেবল একটি শেল খুলবে /path/to/programএবং that শেলের মধ্যে একটি কমান্ড হিসাবে চালিত হবে, এটি কার্যকর না হলে ব্যর্থ হবে।
ফিলাব্রেন্ডেন

ঠিক আছে, আমরা যদি নিটপিক করছি তবে আমরা দুজনেই ভুল are শেল sh -c /path/to/programথেকে /path/to/programইনপুট হিসাবে কমান্ডগুলি পড়ে । ফাইলটির অনুমতি কার্যকর করার দরকার নেই তবে এটি শেল স্ক্রিপ্ট হওয়া উচিত
jwm

হুঁ, এটা sh /path/to/programকরে। আমি নিজে চেষ্টা করেছি :, echo echo hello world >abc.shতারপরে sh ./abc.shমুদ্রণ করুন hello world, যখন sh -c ./abc.shবলেছেন sh: ./abc.sh: Permission denied(যা আপনি ./abc.shএখনকার শেলটিতে সরাসরি চালাবেন ঠিক তেমন ?) আমি কি কিছু মিস করেছি? (অথবা সম্ভবত আমি পূর্ববর্তী মন্তব্যে নিজেকে ভালভাবে প্রকাশ করিনি ...)
ফিলাব্রেন্ডেন

আমার ভুল. নিকৃষ্ট শেলটি ব্যতীত কেবল কমান্ড প্রম্পটে sh -c _something_টাইপ করার মতোই _something_। সুতরাং আপনি সঠিক যে এক্সিকিউট বিট (ফাইল হিসাবে) মিস করলে এটি ব্যর্থ হবে। অন্যদিকে, আপনি শেল কমান্ডগুলির মতো একটি সিরিজ সরবরাহ করতে পারেন sh -c "echo hello world"এবং এটি ঠিক কাজ করবে। সুতরাং এটির প্রয়োজন নেই যে আপনি যা টাইপ করেন তার এক্সিকিউটিভ বিট থাকে (বা এমনকি ফাইলও হতে পারে), কেবল শেল ইন্টারপ্রেটার এটি দিয়ে কিছু করতে পারে।
jwm

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