ใน Windows คุณสามารถแก้ไขทางลัดแอปพลิเคชันและเปลี่ยนเป้าหมายของทางลัด คุณทำสิ่งนี้ใน Mac OS ได้อย่างไร
ตัวอย่างเช่นฉันต้องการเปลี่ยนแอปพลิเคชัน Chrome เพื่อทำการบันทึกอย่างละเอียดโดยการต่อท้ายสิ่งนี้กับคำสั่ง run --enable-logging --v=1
.
ใน Windows คุณสามารถแก้ไขทางลัดแอปพลิเคชันและเปลี่ยนเป้าหมายของทางลัด คุณทำสิ่งนี้ใน Mac OS ได้อย่างไร
ตัวอย่างเช่นฉันต้องการเปลี่ยนแอปพลิเคชัน Chrome เพื่อทำการบันทึกอย่างละเอียดโดยการต่อท้ายสิ่งนี้กับคำสั่ง run --enable-logging --v=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])