ব্যাশ স্ক্রিপ্ট থেকে অ্যাপলস্ক্রিপ্ট চালান


55

যদি আমি ব্যাশ স্ক্রিপ্টের মধ্যে থেকে অ্যাপলস্ক্রিপ্ট চালাতে চাইতাম তবে আমি যে আদেশগুলি কার্যকর করতে হবে তার তালিকা সহ একটি ফাইল কল করতে পারি।

#!/bin/bash
{some commands}
osascript file.scpt
{other commands}

তবে, যদি আমি কমান্ডগুলি চালিত করতে চাইতাম যা বাশের মধ্যে থেকে ক্রমানুসারে চালানো দরকার?

একটি উদাহরণ হবে

#!/bin/bash
echo
echo This will open Google Chrome in Kiosk mode
  osascript -e "tell application \"Google Chrome\""
  osascript -e "activate"
  osascript -e     "tell application \"System Events\""
  osascript -e         "key down {command}"
  osascript -e         "key down {shift}"
  osascript -e         "keystroke \"f\""
  osascript -e         "key up {shift}"
  osascript -e         "key up {command}"
  osascript -e     "end tell"
echo "Google Chrome is now open in Kiosk Mode"

আমি জানি এটি একটি খুব দূরবর্তী উদাহরণ, তবে আমি কী করার চেষ্টা করছি তা বোঝাতে এটি কাজ করে। সাধারণত, এই কমান্ডগুলি সমস্ত জায়গাগুলিতে স্ব স্ব পালনের \অক্ষর ছাড়াই এবং সমস্ত "কমান্ডের চারপাশে কম লেখা থাকবে less আমি তাদের একটি .scptফাইলের ভিতরে থাকতাম ।

আমি যে সমাধানটি সম্পর্কে অবগত রয়েছি তা হ'ল বাশের #!/usr/bin/osascriptপরিবর্তে স্ক্রিপ্টটি পুনরায় লিখতে এবং সেখান থেকে চলে যাওয়া, তবে আমি মিশ্রিত করতে সক্ষম হতে চাই। আমি খুঁজে পেয়েছি যে আমি একটি স্ক্রিপ্ট ফাইলের জন্য পরীক্ষা করতে পারি, যদি এটি উপস্থিত থাকে তবে একটি ফাইল তৈরি করতে এবং প্রতিটি কমান্ড যুক্ত করতে হবে সেই ফাইলটিতে আমার প্রয়োজন এবং পরে বাশের মধ্যে থেকে প্রয়োজনীয় স্ক্রিপ্ট ফাইলটি কার্যকর করা যায়, তবে এটি উদ্দেশ্যকেও পরাস্ত করে।

কোনও ফাইলের মধ্য দিয়ে কোনও উপায় নেই, আমি shebangলাইনটির সাথে ব্যবহৃত শেলটি অদলবদল করতে পারি এবং তারপরে আমি প্রয়োজনীয় কমান্ডগুলি কার্যকর করার পরে আবার অদলবদল করতে পারি, আছে কি?

যে কোনও অন্তর্দৃষ্টি স্বাগত চেয়ে বেশি হতে পারে।

উত্তর:


57

এর পক্ষে যুক্তিটিতে osascript -eনিউলাইনগুলি থাকতে পারে:

osascript -e 'set x to "a"
say x'

আপনি একাধিক -eযুক্তি নির্দিষ্ট করতে পারেন :

osascript -e 'set x to "a"' -e 'say x'

অথবা যদি আপনি একটি heredoc ব্যবহার করেন, bash(তিন অক্ষর ব্যাখ্যা করে \, $এবং `) মধ্যে <<ENDএবং ENDমধ্যে কিন্তু কোন অক্ষর <<'END'এবং END

osascript <<'END'
set x to "a"
say x
END

সম্পাদনা:

যেহেতু ওসাস্ক্রিপ্ট একটি হেরেডোক দিয়ে কাজ করতে পারে (যেমন / dev / stdin থেকে ইনপুট নিতে পারে) তারপরে কেউ কেবল পুরো ফাইল হিসাবে স্ক্রিপ্টটি লিখতে পারে এবং সঠিক শেবাং লাইনটি দিয়ে প্রেন্ডেন্ড করতে পারে:

#!/usr/bin/env osascript

set x to "a"
say x

এটি আপনাকে নীচের পদ্ধতিটি (আপনার স্ক্রিপ্টের নাম পরিবর্তন করে) ব্যবহার করে apple / অ্যাপ্লিকেশন / .app এ আপনার অ্যাপল স্ক্রিপ্টটিকে আসল প্রোগ্রাম হিসাবে সংরক্ষণ করতে দেয়:

mkdir -p ~/Applications/<APP_NAME>.app/Contents/MacOS
touch ~/Applications/<APP_NAME>.app/Contents/MacOS/<APP_NAME>
open -A TextEdit ~/Applications/<APP_NAME>.app/Contents/MacOS/<APP_NAME>

উভয় স্ক্রিপ্ট ফাইল ... / MacOS / এবং ম্যাচগুলিতে নিশ্চিত করুন s


সত্যিই আপনি সঠিক। আমি end tellস্ক্রিপ্টের প্রথমটি মিস করেছি ।
দানিজেল-জেমস ডাব্লু

-eহারডোক উদাহরণে আপনার কোনও প্রয়োজন নেই ?
আইকনোক্লাস্ট

@ আইকনোক্লাস্ট ওসাস্ক্রিপ্টে ম্যান পেজটি এটি স্ক্রিপ্টের এক লাইন। -e statement Enter one line of a script. If -e is given, osascript will not look for a filename in the argument list. Multiple -e options may be given to build up a multi-line script. Because most scripts use characters that are special to many shell programs (for example, AppleScript uses single and double quote marks, ``('', ``)'', and ``*''), the statement will have to be correctly quoted and escaped to get it past the shell intact.
উচ্ছুগাকা

দুঃখিত @ মুচুগাকা, তবে আপনার প্রতিক্রিয়া আমার প্রশ্নের উত্তর কীভাবে দেয় তা বুঝতে আমি ব্যর্থ হয়েছি। ইন -e statement Enter one line of a scriptসেখানে হয় একটি -eতালিকা। তবে এগুলি বাদ দিয়ে কোনও হেরডোককে কী একক লাইন বলে মনে করা হয়?
আইকনোক্লাস্ট

21

আপনি এতে কাঁচা অ্যাপলস্ক্রিপ্ট মোড়ানো করতে পারেন <<EOD... ইনপুটটির শেষ EODসংকেতটি লাইনের প্রথম অবস্থানে আসতে হবে।

(বিটিডাব্লু, আপনার আপেলসক্রিপ্টটি মনে হচ্ছে এর end tellপরেও অনুপস্থিত activate....)

#!/bin/bash
osascript <<EOD
  tell application "Google Chrome"
      activate
  end tell
  tell application "System Events"
      key down {command}
      key down {shift}
      keystroke "f"
      key up {shift}
      key up {command}
  end tell
EOD

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