টার্মিনাল উইন্ডোটি উপস্থিত না হয়ে ওএস এক্সে শেল স্ক্রিপ্ট চালাবেন?


23

আমি কয়েকটি কীবোর্ড শর্টকাট সেট আপ করার চেষ্টা করছি যা নির্দিষ্ট আইটর্ম সেশনগুলি খোলায়, যা আমি বেটারটাইচটুল এবং কিছুটা অ্যাপলস্ক্রিপ্ট যাদুতে সক্ষম হয়েছি। সমস্যাটি হ'ল ওএস এক্স জিওআই (যেমন ফাইন্ডারের কাছ থেকে, বা বেটারটচটুল থেকে কীবোর্ড শর্টকাট হিসাবে) দ্বারা চালিত কোনও শেল স্ক্রিপ্টের জন্য একটি টার্মিনাল উইন্ডো খোলার জন্য জোর দিয়েছিল। যদি আমি অন্য টার্মিনাল থেকে সরাসরি স্ক্রিপ্টটি চালিত করি তবে টার্মিনাল উইন্ডো উপস্থিত হবে না।

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

এটিকে দৃষ্টি থেকে দূরে সরিয়ে নেওয়ার প্রয়াসে আমি স্পেস সেটিংসে টার্মিনাল অ্যাপ্লিকেশনটিকে অন্য ভার্চুয়াল ডেস্কটপেও অর্পণ করার চেষ্টা করেছি, তবে স্ক্রিপ্টটি চালানোর আগে এটি প্রথমে সেই ডেস্কটপে স্যুইচ করবে।

এই আচরণটি পুরোপুরি অক্ষম করার কোনও উপায় আছে কি? স্ক্রিপ্টটি শেষ হওয়ার পরে উইন্ডোটি বন্ধ করার জন্য আমি ইতিমধ্যে টার্মিনাল পছন্দগুলিতে সেটিংটি পেয়েছি তবে টার্মিনাল উইন্ডোটি এক সেকেন্ডের জন্য পপ আপ করা এখনও বিরক্তিকর।


দুঃখিত, আমি বেশ বুঝতে পারি না। এই শেল স্ক্রিপ্টগুলির সাথে আপনি কী করতে চান? আপনি কি শেল স্ক্রিপ্টের পরে আইটার্ম খুলতে চান? আপনি কি নিজের প্রশ্নে কেবল টার্মিনাল.এপ সম্পর্কে কথা বলছেন বা আইটার্মকে "টার্মিনাল" এর সাথে মিশ্রিত করছেন? আপনি যা চালানোর চেষ্টা করছেন তার একটি উদাহরণ পোস্ট করতে পারেন?
11'7

আমি একটি সাধারণ শেল চালু করতে, একটি রেল কনসোল খোলার জন্য, রেলস লগ প্রদর্শন করতে, আমি একচেটিয়াভাবে আইটার্ম ব্যবহার করছি এবং টার্মিনালটি নির্বিশেষে যে কোনও কারণে ওএস এক্স দ্বারা স্বয়ংক্রিয়ভাবে খোলার জন্য আমি বেশ কয়েকটি আইটার্ম সেশন সেটআপ করেছি। তবে যাইহোক, আমি বান্ডিল পদ্ধতির সঠিকভাবে কাজ করার জন্য একটি সমাধান খুঁজে পেয়েছি (সম্পাদিত প্রশ্ন দেখুন)।
টুপিরা

আমি দেখি! ভাল, যদি আপনি নিজের প্রশ্নের উত্তর (নীচের বোতামটি ব্যবহার করে) করতে পারেন এবং আপনি কী করেছেন বা কীভাবে আপনি সমস্যার সমাধান করেছেন তা আমাদের বলতে পারলে এটি দুর্দান্ত aw আপনার প্রশ্নে কিছু উদাহরণ পোস্ট করুন এবং তারপরে একটি সংক্ষিপ্ত উত্তর যুক্ত করুন। এইভাবে, যদি কেউ আপনার পোস্টে হোঁচট খায় তবে তারা সেখান থেকে কিছু শিখতে পারে!
22:25

ঠিক আছে, আমার কাছে এখনও সত্যিকারের প্রশ্নের উত্তর নেই (অর্থাত্‍ টার্মিনালটি কীভাবে সম্পূর্ণভাবে এড়ানো যায়, কোনও অ্যাপ্লিকেশন র‌্যাপার ব্যবহার না করে), তাই যদি কেউ আমাকে আলোকিত করতে পারে তবে আমি এটি খুলতে চাই।
টুপিরা

1
আমি এখনও বিভ্রান্ত আপনি অটোমেটরের দ্বারা নির্মিত একটি। অ্যাপের মাধ্যমে এগুলি চালাতে চান না ?
slhck

উত্তর:


21

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

এটি বাজানো ব্যতীত, এখন আপনি এটিকে (যে কোনও জায়গায় অ্যাপ হিসাবে) সংরক্ষণ করতে পারবেন এবং আইকনটি সেটও করতে পারবেন


আমি একটি পূর্ণ-স্ক্রিন অ্যাপ্লিকেশন থেকে এইভাবে একটি কমান্ড চালানোর চেষ্টা করেছি, তবে এটি সর্বদা এটি ব্যাকগ্রাউন্ডে খোলে। আমাকে অ্যাড করে একটি অ-ব্লকিং ফ্যাশনে শেলের কমান্ডটি ব্যাকগ্রাউন্ড করতে হয়েছিল &এবং তারপরে অ্যাপ্লিকেশনটি (আমার ক্ষেত্রে mplayer) সামনে আনার জন্য একটি অ্যাপলস্ক্রিপ্ট কল করে: mplayer myvideo.avi &; osascript -e 'tell application "System Events" to set frontmost of the first process whose displayed name is "mplayer" to true'
লেনার হোয়েট

কুল হ্যাক @ এমসিবি। তবে কেন পাই না। সাধারণত আমরা টার্মিনাল উইন্ডোটি আড়াল করতে চাই কারণ এটি অন্য একটি উইন্ডো খুলবে, যা মূলটি। আপনার যদি এমপ্লেয়ারের প্রথম টার্মিনাল উইন্ডো দরকার হয় তবে আমি মনে করি এটি অন্য একটিটি খোলেনি এবং তাই আপনি কেন এটি প্রথম স্থানে লুকিয়ে রাখতে চান?
ক্রেগোক্স

আমি mplayerএকটি স্লাইডশো থেকে (স্কিমে) একটি ভিডিও প্লে করতে ব্যবহার করছি । স্কিম পূর্ণস্ক্রিনে সেট করা থাকলে প্লেয়ার পটভূমিতে থাকে এমন একটি ত্রুটি রয়েছে, তবে আমি নিশ্চিত নই, যদিও এই বাগটি কেবল স্কিম বা সমস্ত পূর্ণস্ক্রিন অ্যাপ্লিকেশনের সাথে সম্পর্কিত কিনা, তাই আমি বুঝতে পেরেছিলাম যে আমি আমার সমাধানটি এখানে পোস্ট করব।
লেনার হোয়েট

6

এখানে প্রায় কোনও প্রচেষ্টা ছাড়াই একটি দ্রুত এবং নোংরা উদাহরণ রয়েছে ("মাই্যাপ" নামে একটি অ্যাপ্লিকেশনটির জন্য):

  1. আংশিক অ্যাপ্লিকেশন শ্রেণিবিন্যাস করুন:

        mkdir -p ./myapp.app/Contents/MacOS
    
  2. আপনার স্ক্রিপ্টের প্রথম লাইনে প্রয়োজনীয় প্রোগ্রামের পুরো পথ রয়েছে তা নিশ্চিত করুন, যেমন,

    #!/bin/bash
    
  3. আপনার শেল স্ক্রিপ্টটির নাম দিন "মাইএপ" (কোনও উদ্ধৃতি নেই, কোনও এক্সটেনশন নেই), এটিকে কার্যকর করার অনুমতি দিন এবং তারপরে এটিকে ম্যাকস সাব-ডিরেক্টরিতে রেখে দিন। এটি কার্যকর করার অনুমতিগুলি দিতে:

    chmod ugo+x myapp
    
  4. বিষয়বস্তু সাব-ডিরেক্টরিতে যান এবং স্ট্রিং সহ একটি পিকেজিইনফো ফাইল তৈরি করুন: অ্যাপল ???? [স্ট্রিংয়ের শেষে লাইন টার্মিনেটর নেই!] ফাইলটি তৈরি করতে বিড়াল (1) ইউটিলিটিটি ব্যবহার করুন:

    cat > PkgInfo
    APPL????
    

    আপনি স্ট্রিংটি টাইপ করার পরে (রিটার্নটিকে আঘাত করবেন না!) দুটি কন্ট্রোল-ডি প্রবেশ করান, যা
    কোনও লাইন টার্মিনেটর ছাড়াই ফাইলটি বন্ধ করবে এবং আপনাকে শেল প্রম্পটে ফিরিয়ে দেবে))

  5. অনুসন্ধানকারী থেকে আপনার নতুন "অ্যাপ্লিকেশন" ডাবল ক্লিক করুন। এটি কোনও উইন্ডো ছাড়াই চলবে।


10.13.6 এ কাজ করেনি, ত্রুটি বার্তায় "আপনি" লগইনসেশনটাইমলিমিট.এপ "অ্যাপ্লিকেশনটি খুলতে পারবেন না কারণ এই ধরণের ম্যাকটিতে এটি সমর্থিত নয়" "
ডগলাস

1
আমার জন্য মোজভে (10.14.3) এ কাজ করেছেন। আমি সত্যিই এই পদ্ধতির পছন্দ। ধন্যবাদ।
লোকো.লুপ

10.13.6 এ আমার জন্য কাজ করেছেন। @ ডগলাস আপনার স্ক্রিপ্টটি "ম্যানুয়ালি" চালানোর চেষ্টা করেছে, অর্থাত টার্মিনাল থেকে। সম্ভবত এটি
ডাব্লু

গ্রেট! মোজাভে 10.14.6 এ কাজ করার পরীক্ষিত
নিকোলা

4

আপনি প্লাটিপাস যাচাই করতে চাইতে পারেন , যা শেল স্ক্রিপ্ট এবং অন্যান্য ব্যাখ্যাযুক্ত স্ক্রিপ্ট থেকে ম্যাক ওএস এক্স অ্যাপ্লিকেশন তৈরি করে।


3

আপনি আলফ্রেডের মতো অভিনব অ্যাপ্লিকেশন লঞ্চারদের ক্ষেত্রে এখানে একটি ছোট কাজ রয়েছে । আমি এটি প্রতিদিন ব্যবহার করি এবং আমি পাওয়ারপ্যাকটি কিনেছি , যা আপনাকে নিঃশব্দ শেল স্ক্রিপ্টগুলি চালানোর অনুমতি দেয়

এখানে চিত্র বর্ণনা লিখুন

চলমান অবস্থায় এগুলি কোনও টার্মিনাল খুলবে না এবং কোনও কীওয়ার্ড ক্রমের সাথে আবদ্ধ হতে পারে। তারা এমনকি প্যারামিটারগুলি অন্তর্ভুক্ত করতে পারে এবং অতিরিক্ত বিকল্প থাকতে পারে:

এখানে চিত্র বর্ণনা লিখুন

আমি এটি কয়েকটি ছোট স্নিপেটের জন্য ব্যবহার করি এবং এটি খুব নমনীয়।



1

যদি আপনি কী যুক্ত করেন LSUIElementএবং এটিকে সেট 1করেনInfo.plist আপনার অ্যাপের, এটা ডক একটি আইকন তৈরী করবে না।

এখানে Info.plistআমার ছোট শেল স্ক্রিপ্ট অ্যাপ্লিকেশনটি রয়েছে:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleExecutable</key>
    <string>launch</string>
    <key>CFBundleIconFile</key>
    <string>launch</string>
    <key>LSUIElement</key>
    <string>1</string>
</dict>
</plist>

ধন্যবাদ, তবে এর কোনও প্রভাব আছে বলে মনে হয় না। আমি touchসর্বশেষতম সংস্করণটি ব্যবহৃত হয়েছে তা নিশ্চিত করতে বান্ডিলটি আইএনও চেষ্টা করেছিলাম । তবে যাইহোক, আমি সত্যিই বান্ডিল পদ্ধতির পছন্দ করি না কারণ মনে হয় এটি সর্বদা পৃথক অ্যাপের দৃষ্টান্ত তৈরি করবে
12:30 এ টপপিরা

আমার জন্য স্পর্শও কোনও উপকারে আসেনি (আমি এলএসইউআইলেমেন্টটি স্যুইচ অফ করার চেষ্টা করেছি), এখানে আরও কিছু ধরণের ক্যাশে রয়েছে, তবে সংকোচনের এবং অ্যাপ্লিকেশনটি নিষ্কাশন করতে সহায়তা করেছে। আপনি কেন বান্ডিল পদ্ধতির পছন্দ করেন না? এছাড়াও আপনি অ্যাপ্লিক্রিপ্ট ব্যবহার করতে পারেন এবং চালাতে পারেন do shell script "say 'arsti'", এটি টার্মিনাল উইন্ডোটি খুলবে না।
টাইগ

ঠিক আছে, দেখা যাচ্ছে আমি কেবল বোকা ;-) কোনও অ্যাপ্লিকেশন ইতিমধ্যে অ্যাপলস্ক্রিপ্টের সাথে চলছে কিনা তা যাচাই করার জন্য আমি একটি নির্ভরযোগ্য উপায় খুঁজে পাইনি, তাই আমি একটি সাধারণ বাশ স্ক্রিপ্ট ব্যবহার করেছি যা কল করে pgrepএবং তারপরে প্রাসঙ্গিক কোডটি সরাসরি এতে চলে যায় osascript(অ্যাপলস্ক্রিপ্ট দোভাষী)। সমস্যাটি pgrepহোমব্রু থেকে এসেছে এবং এটি ডিফল্টে নেই $PATH। সুতরাং আমার স্ক্রিপ্টটি সর্বদা একটি নতুন আইটার্ম উদাহরণ চালু করেছে, যদিও এটি ইতিমধ্যে চালু ছিল। pgrepস্ক্রিপ্টে পুরো পথটি যুক্ত করার পরে বান্ডিলের পদ্ধতিটি
সর্বোপরি ঠিকঠাক

উপরের @ জেফবি-র উত্তরটির সাথে এই উত্তরটির সংমিশ্রণ এবং @ টিগের ইনফো.প্লিস্টের সরলিকৃত সংস্করণ (আমি কী CFBundleExecutableএবং CFBundleIconFileকীগুলি সরিয়ে দিয়েছি ) দিয়ে আমি পুরোপুরি কাজ করতে পেরেছি।
ডেভ ল্যান্ড

0

এখানে কিছুটা কার্যনির্বাহী:

একটি অ্যাপ্লিক্রিপ্ট তৈরি করুন যা শেল স্ক্রিপ্টকে কল করে :)

osacompile -e 'do shell script "cd ~; echo aaa > temp.txt"' -o ~/name_of_script.scpt

osacompileকম্পাইল হবে 'do shell script "XXX"'applescript স্নিপেট। আপনার শেল স্ক্রিপ্টটি হল XXX।

উদ্ধৃতি দেওয়ার জন্য সতর্কতা অবলম্বন করুন, শেল স্ক্রিপ্টটি সঠিকভাবে উদ্ধৃত করতে হবে আপনি যে শেলটি ব্যবহার করছেন তা এটি এখনও অক্ষত রচনা করতে ব্যবহার করতে পারেন।

তবে এটি কোনও বেহাল দশা ছাড়াই বেটারটাইচটুল থেকে চালানো যেতে পারে।


0

অন্য একটি সম্ভাব্য workout আছে। একটি স্বয়ংক্রিয় কর্মপ্রবাহে আপনার শেল স্ক্রিপ্টটি নিরাপদ করুন। চালু করা সহ ওয়ার্কফ্লোটি চাওয়া। কোডটি হ'ল:

/usr/bin/automator /path/to/the/file.workflow

এটি কোনও প্রোগ্রাম আরম্ভ করবে না বা মেনু বারে এবং এর পথটি আরও নীরবতার পরে প্ল্যাটিপাস অ্যাপে প্রদর্শিত হবে না।

শেল স্ক্রিপ্টগুলি কার্যকর করার একটি আরও ভাল উপায় সরাসরি চালু করা হয়।

/bin/bash /path/to/shellScript.command

পটভূমিতে নিঃশব্দে কমান্ডটি কার্যকর করবে।

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