হোম ফোল্ডারে লগইন থাকা অবস্থায় বাশ স্ক্রিপ্ট চালাবেন?


19

যখন আমি কোনও LaunchAgent plist লোড করার চেষ্টা করি তখন launchctlহোম ডিরেক্টরিতে স্ক্রিপ্টটি কীভাবে চালানো যায় তা আমি খুঁজে পাই না।

আমার কোডটি হ'ল:

<?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>ProgramArguments</key>
    <array>
        <string>bash</string>
        <string>~/script.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>Label</key>
    <string>com.tyilo.test</string>
</dict>
</plist>

আমি ব্যাশ সহ এবং ছাড়া উভয় চেষ্টা করেছি এবং এর সাথে প্রতিস্থাপন ~করেছি $HOME। আমি bash -cএটি কাজ না করে ব্যবহার করার চেষ্টা করেছি।

ত্রুটি কোডটি হ'ল:

`com.tyilo.test: bash: ~/script.sh: No such file or directory`

সম্পূর্ণ পাথ যেমন /Users/name/script.sh নির্বাণ চেষ্টা করুন (! এছাড়াও আমি স্ক্রিপ্ট এক্সিকিউটেবল এবং প্রথম লাইন # / বিন / ব্যাশ করতে এবং সরাসরি এটি চালানোর হবে)
user151019

আমি একাধিক অ্যাকাউন্ট এবং কম্পিউটারে ব্যবহার করার মতো পুরো পথটি ব্যবহার করতে পারি না।
টাইলো

1
যদি এটি আমার একাধিক অ্যাকাউন্টগুলি ব্যবহার করতে হয় তবে আপনাকে প্রতিটি ব্যবহারকারীর multiple HOM এ একাধিক অনুলিপি তৈরির পরিবর্তে এটি / usr / local / bin / এ রেখে দেওয়া উচিত। আপনি এই স্ক্রিপ্টটি দিয়ে কী অর্জন করতে চাইছেন তা জানতে সহায়ক হবে। এটি লগইনহুক, আইএমওর মতো কাজের মতো শোনাচ্ছে।
টিজে লুওমা

উত্তর:


14

EnableGlobbingএর জন্য টিলড এবং ওয়াইল্ডকার্ড সম্প্রসারণ সক্ষম করে ProgramArguments:

<key>EnableGlobbing</key>
<true/>
<key>ProgramArguments</key>
<array>
    <string>say</string>
    <string>~/*</string>
</array>

এটি প্রভাবিত করে না Programবা WatchPaths, যদিও টিল্ড সম্প্রসারণ WatchPathsডিফল্টরূপে কাজ করে।


এটি করার এটি আরও ভাল উপায়। এমন কোনও জায়গা আছে যেখানে আপনি লঞ্চএজেন্ট প্লাস্টে কীগুলির জন্য ডকুমেন্টেশন দেখতে পাচ্ছেন?
টাইলো


1
এটি আমাকেও সাহায্য করেছিল। নিম্নলিখিত ম্যাক ওএস এক্স সংস্করণে চেষ্টা করা হয়েছে: 10.7, 10.8 এবং 10.9।
ডিজে এস

6
দয়া করে নোট করুন: এই বৈশিষ্ট্যটি Yosemite ( Mac OS X 10.10+) এ সরানো হয়েছে ।
অ্যালেক্স ধূসর

দেখে মনে হচ্ছে এটি 10.9.5-এ হয় না
ocodo

18

সক্ষমগ্লোব্বিং ওএস এক্স ইয়োসেমাইট 10.10 এ কাজ করে না । এটি হ্রাস করা হয়েছে ( রেফ )

আপনি লগগুলিতে দেখতে পারেন The EnableGlobbing key is no longer respected. Please remove it.(থেকে /var/log/system.log)

সমস্যাটি হ'ল launchdসিডব্লিউড (বর্তমান ওয়ার্কিং ডিরেক্টরি) /, তাই আপনি ./কিছু লোকের মতো বলে ব্যবহার করতে পারবেন না ।

আপনার বাড়ি থেকে কোনও স্ক্রিপ্ট চালানো সহজ উপায়টি হ'ল ব্যবহার করা (bash|zsh|sh) -c। বিকল্প। এইভাবে আপনার টিলড ~বা $HOMEভেরিয়েবল ব্যবহার করার ক্ষমতা থাকবে ।

<?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>Label</key>
    <string>org.your.stuff</string>
    <key>ProgramArguments</key>
    <array>
      <!-- here is the important thing -->
      <string>zsh</string>
      <string>-c</string>
      <string>~/you/script/in/your/home</string>
    </array>

    <!-- code below is just for the example -->
    <!-- Keep running... -->
    <key>KeepAlive</key>
    <true />
    <!-- ...every day. In sec, 60*60*24 = every day -->
    <key>ThrottleInterval</key>
    <integer>86400</integer>
  </dict>
</plist>

2
আমি মনে করি না আপনি এর সাথে টিল্ড ব্যবহার করতে পারেন sh; বাশ যখন এতে জড়িত থাকে sh, তখন এটি পসিক্স সামঞ্জস্যতা মোডে চলে, যা অনেকগুলি বাশ এক্সটেনশানকে অক্ষম করে।
ট্রিপলি

~/গোবলিং করছে তাই সমর্থিত নয়। আপনি ./ব্যবহারকারী হোম লাইব্রেরিতে ডেমন সংরক্ষণ করা হয় ততক্ষণ আপনি তার পরিবর্তে ব্যবহার করতে পারেন । ( ~/Library/LaunchAgents)
ব্রুনো

9

এটি করার মধ্যে আমি সবচেয়ে নির্ভরযোগ্যরূপটি পেয়েছি shএবং HOMEপরিবেশের পরিবর্তনশীলটি ছিল:

<?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>ProgramArguments</key>
    <array>
        <string>sh</string>
        <string>-c</string>
        <string>"$HOME/script.sh"</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>Label</key>
    <string>com.tyilo.test</string>
</dict>
</plist>

দ্রষ্টব্য: উদ্ধৃতিগুলি প্রয়োজনীয়।


2

স্ক্রিপ্টটি কেন ব্যবহারকারীর হোম ডিরেক্টরি থেকে চালানো দরকার তা জানতে সহায়ক হবে। স্ক্রিপ্টের জন্য যদি আপনার ব্যবহারকারীর শর্টনাম প্রয়োজন হয় তবে আপনি এটিকে যেমন চলক হিসাবে নির্দিষ্ট করে এটি পেতে পারেন

user=`whoami`

তারপরে ব্যবহার করুন $user স্ক্রিপ্টে করুন।

আমি সত্যিই স্ক্রিপ্টটি কোনও হোম ডিরেক্টরি ছাড়া অন্য কোথাও রেখে দেব, তারপরে এটি একই কম্পিউটারে অন্য ব্যবহারকারীদের দ্বারা অ্যাক্সেসযোগ্য। আপনি ভাগ করা ডিরেক্টরি ব্যবহার করতে পারেন বা স্ক্রিপ্টটি / লাইব্রেরি / স্ক্রিপ্ট / এ রাখতে পারেন

লঞ্চ করা প্লিস্টের জন্য আপনাকে পুরো পথটি ব্যবহার করতে হবে। এছাড়াও, আপনার আরম্ভ করা প্লিস্টে আপনাকে নির্দিষ্ট করার দরকার নেই <string>bash</string>কারণ আপনার স্ক্রিপ্টে শেবাং থাকা উচিত এবং এটি কার্যকর করতে হবে।


bashবাস্তবায়নের জন্য কমান্ড হিসাবে প্রকৃতপক্ষে নির্দিষ্ট করা কোনও সত্যিকারের ক্ষতি নয় with যদি তার কাছে শেবাং না থাকে বা স্ক্রিপ্টটি সম্পাদনযোগ্য (o = rwx) করা ভুলে যায়, তবে বাশ এখনও স্ক্রিপ্টটি চালিয়ে যাবে / চালাবে।
জেসন সালাজ 13'12

1
ইতিমধ্যে username USER বা O LOGNAME এর মতো ব্যবহারকারীর নামটির জন্য একটি পরিবর্তনশীল থাকা উচিত। এছাড়াও, ভাগ করা ইউনিক্স স্ক্রিপ্টগুলির জন্য সাধারণ অবস্থানটি / ইউএসআর / স্থানীয় / বিন / হবে না (আপনি এগুলি অন্য কোনও জায়গায় রাখতে পারেন নি তবে / usr / স্থানীয় / বিন / সম্ভবত ইতিমধ্যে আপনার AT PATH তে থাকবে)।
টিজে লুওমা

হুয়ামি ব্যবহার করা $ USER বা $ LOGNAME হিসাবে একই তথ্য পাওয়ার জন্য অন্য একটি পদ্ধতি। আমি উপরের অবস্থানগুলি প্রস্তাব করেছি কারণ আমি প্রশ্নকারীর কিছু অনুমান করতে চাইনি। এছাড়াও, লঞ্চ করা প্লিস্ট কাজ করার চেষ্টা করার আগে, স্ক্রিপ্টটি আসলে সি এল এল থেকে চালাতে সক্ষম হওয়া প্রয়োজন।

1

এটা কি কার্যকর?

chmod 700 ~/script.sh

টার্মিনালে। এছাড়াও, আমি $ হোম বা ~ না বরং ফাইলটির আসল পথটি ব্যবহার করব।

<?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>Label</key>
    <string>com.tyilo.test</string>
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/script.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

ডাউনটোটের কারণ কী?
টিজে লুওমা

1

যদি আপনার স্ক্রিপ্টটি কোনও ব্যবহারকারী এজেন্ট (এবং এটি হোম ফোল্ডারের লাইব্রেরিতে অবস্থিত) launchdহয় তবে বর্তমান কার্য ডিরেক্টরি ডিরেক্টরি হোম ফোল্ডার। UNIX পথের সময়কাল সহ হোম ডিরেক্টরিকে বোঝায়।

সুতরাং মূলত, ./script.shপরিবর্তে ব্যবহার করুন ~/script.sh। ;-)


3
নাহ, লঞ্চ করা ওয়ার্কিং ডিরেক্টরি আসলে /'~' নয়।
Tyilo

@ টাইলো আমি নিশ্চিত আপনি কি বলতে চাইছেন তা নিশ্চিত নয়। আপনার যদি বোঝানো হয় "লঞ্চের ওয়ার্কিং ডিরেক্টরি হ'ল মূল, সব ক্ষেত্রে এমনকি ব্যবহারকারী মোডেও", দয়া করে একটি রেফারেন্স সরবরাহ করুন। যদি আপনার অর্থ "লঞ্চড টিলডের পরিবর্তে স্ল্যাশ ব্যবহার করে", তবে আমার পোস্টটি আবার পড়ুন। যাইহোক, আমার লঞ্চে নির্ধারিত বেশ কয়েকটি স্ক্রিপ্ট রয়েছে এবং তারা আমার বর্ণিত আচরণটি অনুসরণ করে। ;-)
কনস্টান্টিনো জারোহাস

1
@RandyMarch আমি একটি লঞ্চ এজেন্ট তৈরি ~/Library/LaunchAgentsআর্গুমেন্ট সহ: sh, -c, echo $HOME > /Users/Tyilo/launchd_home.txt। যখন ফাইল দৌড়ে /Users/Tyilo/launchd_home.txtঅন্তর্ভুক্ত /না /Users/Tyilo
Tyilo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.