শেল স্ক্রিপ্ট লাইনের শেষে এম্পারস্যান্ডের অর্থ কী?


118
sh sys-snap.sh &

কী sh? কী sys-snap.sh? কেন আমাকে &লাইনের শেষে রাখা উচিত ? সিনট্যাক্সের কথা কি কেউ ব্যাখ্যা করতে পারেন?

&স্ক্রিপ্ট ব্যতীত আমি Ctrl+ টিপ না দেওয়া পর্যন্ত প্রম্পটে ফিরে যাবে না C। সঙ্গে &লিখুন এবং এটি কাজ করে আমি টিপতে পারেন।


2
ডাবল &&অ্যাম্পারস্যান্ড &কি একক অ্যাম্পারস্যান্ড থেকে আলাদা ?
চার্লি পার্কার

1
@ চর্লিপার্কার আপনি কি কখনও এর উত্তর খুঁজে পেয়েছেন? আমি নিজেই পার্থক্যটি বের করার চেষ্টা করছি। (সম্পাদনা করুন: কিছুই নয়, এটি আরও নীচে পাওয়া গেল)
ড্রাজেন বেলভুক

উত্তর:


94

shডিফল্ট বোর্ন-সামঞ্জস্যপূর্ণ শেল (সাধারণত বাশ বা ড্যাশ)

sys-snap.shহ'ল একটি শেল স্ক্রিপ্ট, এতে shকার্য সম্পাদনকারী কমান্ড রয়েছে । আপনি যেহেতু এর সামগ্রী পোস্ট করবেন না, আমি কেবল এটির নাম থেকে অনুমান করতে পারি, এটি কী করে। একই ফাইলের নামের সাথে সিপ্যানেলে সম্পর্কিত একটি স্ক্রিপ্ট আমি খুঁজে পেতে পারি, যা সমস্ত বর্তমান প্রক্রিয়া, বর্তমান মেমরির ব্যবহার, ডাটাবেস স্থিতি ইত্যাদির সাহায্যে একটি লগ ফাইল তৈরি করে যদি স্ক্রিপ্টটি শেবাং লাইন ( #!/bin/shবা অনুরূপ) দিয়ে শুরু হয় , আপনি এটি কার্যকর করতে পারবেন সঙ্গে chmod +x sys-snap.shএবং এটি সরাসরি ব্যবহার করে শুরু ./sys-snap.shহলে বর্তমান ডিরেক্টরী হয়।

&প্রক্রিয়াটি পটভূমিতে শুরু হওয়ার সাথে সাথে আপনি শেলটি ব্যবহার চালিয়ে যেতে পারেন এবং স্ক্রিপ্টটি শেষ না হওয়া পর্যন্ত অপেক্ষা করতে হবে না। যদি আপনি এটি ভুলে যান তবে আপনি বর্তমান চলমান প্রক্রিয়াটি বন্ধ Ctrl-Zকরে পটভূমিতে bg(বা এর সাথে অগ্রভাগে fg) দিয়ে এটি চালিয়ে যেতে পারেন । আরও তথ্যের জন্য, কাজের নিয়ন্ত্রণ দেখুন


4
shসাধারণত bashবা dashলিনাক্স ভিত্তিক সিস্টেমে (বা সাম্প্রতিক ওএস / এক্স)। বিএসডিগুলিতে এটি সাধারণত অ্যাশের আরও একটি বৈকল্পিক (ড্যাশ নেটবিএসডি শের উপর ভিত্তি করে, নিজেই অলকুইস্ট শেলের উপর ভিত্তি করে) বা পিডিক্স ডেরিভেটিভ। বাণিজ্যিক ইউনিটগুলিতে, এটি সাধারণত ksh88।
স্টাফেন চেজেলাস

1
@ জোফেল: নীচের স্ক্রিপ্টটি চলতে থাকলে এবং ভুল করে আমি সিটিআরএল-সি কার্যকর করেছি What আমার স্ক্রিপ্ট কার্যকর হবে বা এটি বন্ধ হয়ে যাবে? উদাহরণস্বরূপ: sh sys-snap.sh &
হুসেন 7

2
@ হুসেন 7 সিটিআরএল-সি সর্বদা বর্তমান প্রক্রিয়াটিতে অগ্রভাগে প্রেরণ করা হয়। যদি শেল-স্ক্রিপ্টটি শুরু হয় &এবং সেইজন্য পটভূমিতে থাকে তবে আপনি কেবল একটি নতুন শেল প্রম্পট পাবেন।
জোফেল

2
ডাবল &&অ্যাম্পারস্যান্ড &কি একক অ্যাম্পারস্যান্ড থেকে আলাদা ?
চার্লি পার্কার

7
@ চার্লিপার্কার হ্যাঁ, "&&" হল "এবং" ফাংশন। && এর পরে কমান্ডটি কেবল তখনই কল করা হয় যখন কমান্ডটি সাফল্যের আগে সফল হয়। উদাহরণ "সত্য && ইকো কাজ করে" আউটপুট "কাজ করে, তবে" মিথ্যা && ইকো কোনও আউটপুট "ইকো ফাংশনটিকে কল করে না
jofel

87

এটি job controlইউনিক্সের অধীনে পরিচিত । &ব্যাকগ্রাউন্ডে কমান্ড লাগাতে শেল জানায়। এর অর্থ এটি sys-snap.shকমান্ডটি চালিয়ে যেতে পারে তবে আপনাকে সমান্তরাল কমান্ডগুলি চালিয়ে যাওয়ার জন্য আপনাকে শেলটিতে ফিরিয়ে দেয়।

jobsকমান্ডের সাহায্যে বর্তমানে কাজ করা তালিকার তালিকা দেখতে পাবেন । কমান্ডটি ব্যবহার করে আপনি কমান্ডটিতে ফিরে যেতে পারেন ('অগ্রভাগে আনুন)' fg। কোনটি কমান্ড ফিরে রাষ্ট্র যেখানে আপনি কোন প্রম্পট দেখতে pulls এবং আপনি জারি করার আছে Ctrl- Cথেকে বধ প্রক্রিয়া। তবে আপনি যে প্রক্রিয়াটি স্থগিত (বিরতি) রাখতে পারেন Ctrl- জারি করে Z। এটি বিরতি দেবে sys-snap.shএবং আপনাকে আপনার প্রম্পটে ফিরিয়ে দেবে। এর পরে আপনি পটভূমি এটা (যেন আপনি এটা জারি করেছে পারেন সঙ্গে& ) সঙ্গে bgকমান্ড, এবং এটি হবে সারসংকলন তা থেকে চলমান বিরাম দেওয়া রাষ্ট্রীয় Ctrl- Zএটা করা হয়েছিল।

নোট করুন যে আপনার একসাথে একাধিক কাজ থাকতে পারে (যেমন দেখানো হয়েছে jobs):

[1]-  Running          sys-snap.sh &
[2]+  Running          another-script.sh &

আপনি তাদের কাজের নম্বর ব্যবহার করে তাদের ব্যাকগ্রাউন্ড এবং ফোরগ্রাউন্ড করতে পারেন, %1হবে sys-snap.shএবং %2থাকবে another-script.sh। আপনি ব্যবহার করেন তাহলে fgবা bgআর্গুমেন্ট এটা কাজ দ্বারা চিহ্নিত পদক্ষেপ আদেশ দেব ছাড়া +মধ্যে jobsউপরে আউটপুট।

fg %1

করা হবে sys-snap.shফোরগ্রাউন্ড ফিরে চলেই যখন another-script.shপটভূমিতে।

আপনি ইস্যু করতে পারে Ctrl- Cতাদের সাথে ফোরগ্রাউন্ড করেও কাজ চলমান ক্রম killকমান্ড kill %1সমতুল্য পাঠাবে Ctrl- Cথেকে sys-snap.sh

আপনি যদি ব্যাশ শেল ব্যবহার করে থাকেন তবে man bashকমান্ডের অধীনে 'জব কন্ট্রোল' শীর্ষক বিভাগের অধীনে আরও একটি বিশদ রয়েছে more

এর নাম হিসাবে sys-snap.sh, ইউনিক্সের অধীনে ফাইলগুলির নামগুলি স্বেচ্ছাচারিত হয় (গতিশীল লোডার ফাইলগুলির মতো কয়েকটি ব্যতিক্রম সহ)। এগুলি শেল স্ক্রিপ্ট হিসাবে চালিত করার জন্য নির্দিষ্ট ফাইল এক্সটেনশনগুলির প্রয়োজন নেই, অন্যান্য কমান্ড যেমন perlবা phpইত্যাদি অনুরোধ করে এটি সাধারণত স্পষ্টতা প্রদান করতে ব্যবহৃত হয়, উদাহরণস্বরূপ, এটি .shবোর্ন শেল ব্যবহার করে শেল স্ক্রিপ্ট হিসাবে ব্যবহৃত হয় /bin/sh

কার্যকরী অংশ sys-snap.sh(যখন আপনি lessকমান্ডের মতো কিছু সহ এর বিষয়বস্তুটি দেখুন ) হ'ল শেবাং । প্রথম লাইনে আপনি সম্ভবত একটি খুঁজে পাবেন:

#! /bin/sh
#! /bin/bash
#! /usr/local/bin/bash

অথবা সাদৃশ্যপূর্ণ. মৌলিক পরিভাষায়, কমান্ডটি #!(যেমন /bin/sh) রান করার পরে এবং স্ক্রিপ্টের বাকী ফাইলগুলির সামগ্রীতে এটি একবারে একটি লাইন সরবরাহ করা হয়। নোট করুন যে ফাইলটি অবশ্যই নির্বাহযোগ্য হতে হবে chmodযাতে আপনি এটি একটি কমান্ড হিসাবে চালাতে পারেন। যদি অনুমতিগুলি সেট না করা থাকে, তবে shebangএর কোনও প্রভাব নেই, কারণ আপনি হয় ত্রুটি পাবেন:

bash: sys-snap.sh: command not found

অথবা আপনি যদি এটি সুস্পষ্ট পথে চালিত করেন ./sys-snap.sh( .যার অর্থ বর্তমান ওয়ার্কিং ডিরেক্টরি) আপনি পাবেন:

bash: ./sys-snap.sh: Permission denied

অন্য বিকল্পটি হ'ল এটিকে নির্বাহের অনুমতি ব্যতীত ছেড়ে দেওয়া এবং স্পষ্টভাবে এটি চালাতে / বিন / এসকে জিজ্ঞাসা করুন:

/bin/sh sys-snap.sh &

3
এটি একটি দুর্দান্ত উত্তর। একটি সম্ভাব্য পরামর্শ হ'ল কী কী nohupকরে তা যুক্ত করা, কারণ এটি প্রায়শই &একটি প্রক্রিয়া শুরু করার সাথে এবং একসাথে প্রক্রিয়াটি না মেরে যে শেলটি চালু করেছিল তা মেরে ফেলতে ব্যবহার করা হয়।
টমি

@ দ্রাভ, এটি কি সত্য jobsযদি এটির প্রথম আদেশটি সর্বদা খালি ফিরে আসবে?
পেসারিয়ার

নোট করুন যে &কোনও কমান্ডের শেষে কেবল বিচ্ছিন্ন stdin(তবে নয় stdoutবা stderr) সারণি ব্যবহার করে যা বোঝায় যে আপনার কমান্ড / স্ক্রিপ্টটি পটভূমিতে চলমান থাকলেও লিখছেন stdout, আপনি এমন পরিস্থিতিতে চলে যেতে পারেন যেখানে Ctrl + cআউটপুট থামবে না তবে আপনি সক্ষম হবেন কমান্ড টাইপ করতে। এটি কারণ পটভূমি প্রক্রিয়াটি লিখছে stdoutতবে আপনি এটি থামাতে পারবেন না কারণ এটি পূর্বের পৃষ্ঠায় চলছে না। আরও তথ্য এখানে
ভাদসাম্বার

4

shএকটি খোল কোন শেল হুবহু সিস্টেমের উপর নির্ভর করে। এমন একটি সিস্টেমের উদাহরণ যা bashএর স্ট্যান্ডার্ড শেল হিসাবে ব্যবহার করে :

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 13 16:12 /bin/sh -> bash

$ sh --version
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)

sys-snap.shকোনও ধরণের sh sys-snap.shশেল স্ক্রিপ্ট হবে , সুতরাং শেল স্ক্রিপ্টটি কার্যকর করবে।

&শেল প্রক্রিয়াটি পটভূমিতে চালিত করবে। ছাড়া &এটা না হওয়া পর্যন্ত স্ক্রিপ্ট শেষ হয় ফোরগ্রাউন্ড থাকবে। স্ক্রিপ্টটি যে কোনও উপায়ে কাজ করবে, এটি আরও কমান্ড কার্যকর করার আগে স্ক্রিপ্টটি শেষ হওয়ার অপেক্ষা রাখার প্রশ্ন।


1

আপনার সার্ভার হোস্টগেটরে আছে?

স্ক্রিপ্টটি sys-snap.shসিস্টেমের জন্য সমস্ত লগ ফাইল এবং ডেটা সংগ্রহ করার জন্য হোস্টগেটর টিমের দ্বারা লিখিত একটি বিশেষ স্ক্রিপ্ট, সুতরাং তারা সিস্টেমটির তথ্য পর্যবেক্ষণ ও সংগ্রহের ক্ষেত্রে এর ফলাফলকে ব্যবহার করে।


না আমি হোস্টগেটর ব্যবহার করছি না।
user4951

1
@ জে চ্যাং স্ক্রিপ্টটি সিপ্যানেলের অংশ যা হোস্টগেটর এবং শত শত অন্যান্য হোস্ট ব্যবহার করে।
472084

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