วิธีการเปลี่ยนคำสั่งเรียกใช้แอปพลิเคชันเมื่อเริ่มต้นจาก Dock


1

ใน Windows คุณสามารถแก้ไขทางลัดแอปพลิเคชันและเปลี่ยนเป้าหมายของทางลัด คุณทำสิ่งนี้ใน Mac OS ได้อย่างไร

ตัวอย่างเช่นฉันต้องการเปลี่ยนแอปพลิเคชัน Chrome เพื่อทำการบันทึกอย่างละเอียดโดยการต่อท้ายสิ่งนี้กับคำสั่ง run --enable-logging --v=1.



เยี่ยมมากที่ตอบคำถามของฉันขอบคุณ!
Ben Simmons

เพื่อให้แน่ใจว่าตอบคำถามนี้แล้ว @ 0942v8653 คุณกรุณาโพสต์คำตอบพร้อมลิงก์ไปยัง SuperUser และสรุปเนื้อหาของคำตอบนั้นหรือไม่
tubedogg

คำตอบ:


1

คุณสามารถใช้ Automator หรือ AppleScript เพื่อสร้างแอปที่เปิดตัวแอพด้วยอาร์กิวเมนต์เฉพาะ:

-- Applescript version
do shell script "open -a 'Google Chrome' --args --enable-logging --v=1"

หรือคุณสามารถเข้าไปในชุดแอพและปรับเปลี่ยน Info.plist เปลี่ยน CFBundleExecutable จาก (ตัวอย่าง) "Google Chrome" เป็นชื่อของสคริปต์ตัวตัดคำใหม่ที่คุณใส่ใน MacOS นี่คือสคริปต์ Python ที่ทำให้เป็นอัตโนมัติสำหรับคุณ (จริง ๆ แล้วมันทำให้แอปใหม่ที่มี symlink) เรียกใช้ด้วย python linkapp.py<path to actual app> <where to put new app> ในเทอร์มินัล เมื่อถามคุณว่าจะสร้างสคริปต์ตัวตัดคำตอบหรือไม่ y.

( ตอนนี้สคริปต์อยู่บน GitHub แต่ฉันจะพยายามอัปเดตอันนี้ต่อไป)

#!/usr/bin/env python

import sys
import os
import shutil
import subprocess
import re

WRAPPER_SCRIPT = '''\
#!/usr/bin/env bash
executable="$(dirname "$0")/%s"

# add flags here.
"$executable" 
'''

def printerr(message):
    sys.stderr.write("\033[1;31m" + message + "\033[0m")

def link_item(item):
    os.symlink(os.path.join(bundle_contents_path, item),
               os.path.join('.', item))

def replace_executable(filename, new_executable):
    old_executable = subprocess.check_output(['defaults', 'read', os.path.abspath(filename), 'CFBundleExecutable'])
    old_executable = old_executable.rstrip()
    subprocess.call(['defaults', 'write', os.path.abspath(filename), 'CFBundleExecutable', new_executable])
    return old_executable


if len(sys.argv) <= 2:
    printerr("Usage: linkapp.py <app-bundle> <new-place>\n")
    exit(1)


bundle_path = os.path.abspath(sys.argv[1])
bundle_contents_path = os.path.join(bundle_path, 'Contents')
new_contents_path = os.path.abspath(os.path.join(sys.argv[2], 'Contents'))
os.makedirs(new_contents_path)

# loop through the app bundle and symlink everything
#                                        (except Resources, MacOS & Info.plist)
os.chdir(new_contents_path)
for i in os.listdir(bundle_contents_path):
    if i.lower() != 'info.plist':
        if i.lower() in ['resources', 'macos']:
            os.makedirs(i)
            for j in os.listdir(os.path.join(bundle_contents_path, i)):
                link_item(os.path.join(i, j))
        else:
            link_item(i)

# just copy Info.plist for easy editing
shutil.copy(os.path.join(bundle_contents_path, 'Info.plist'), new_contents_path)
subprocess.call(['plutil', '-convert', 'xml1', 'Info.plist'])

printerr("Create wrapper script [y/n]? ")
ans = sys.stdin.read(1)
if ans.lower() == 'y':
    os.chdir('MacOS')

    wrapper_script_file = 'run_with_specified_arguments.sh'

    original_executable = replace_executable('../Info.plist', wrapper_script_file)

    with open(wrapper_script_file, 'w') as f:
        f.write(WRAPPER_SCRIPT % original_executable)
    os.chmod(wrapper_script_file, 0755)

    subprocess.call(['open', '-R', wrapper_script_file])
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.