是否可以确定什么叫bashshell脚本?
Is it possible to determine what called a bash shell script?
有什么方法可以确定 shell 脚本是如何调用的?
我有一个 bash 脚本,它在 macOS 上的熊掌记应用程序的注释中添加了一行。它组成一个 x-callback url 并打开它。
这些是最相关的最后几行(导致这一点的一切都是获取和设置变量值):
#compose URL
theURL="bear://x-callback-url/add-text?id=${noteId}&mode=prepend&new_line=yes&text=$urltext"
#x-callback
open "$theURL"
脚本是 运行 每个工作日通过 launchd
执行一次。这是 .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>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:/usr/local/sbin</string>
</dict>
<key>Label</key>
<string>jobname</string>
<key>ProgramArguments</key>
<array>
<string>/Users/username/Library/Scripts/scriptname.sh</string>
</array>
<key>RunAtLoad</key>
<false/>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key>
<integer>12</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>1</integer>
</dict>
<dict>
<key>Hour</key>
<integer>12</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>2</integer>
</dict>
<dict>
<key>Hour</key>
<integer>12</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>3</integer>
</dict>
<dict>
<key>Hour</key>
<integer>12</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>4</integer>
</dict>
<dict>
<key>Hour</key>
<integer>12</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>5</integer>
</dict>
</array>
</dict>
</plist>
当我从命令行运行脚本时,当我通过launchd
(如上所述)运行它时,除了18:00(例如12:15 在上面),它按预期执行。
然而,当我在 18:00 将我的 launchd
工作更改为 运行 时,我在注释中看到了重复的行 - 所以我的结论是 2 launchd
工作同时运行宁。
我已经搜索了所有可能的目录 [见下文] 以寻找一个幻影作业 .plist,但是 none。
我修改了脚本,在 运行 时将“$0”和日期时间戳写入文件,因此我可以看到调用的是同一个脚本,而且我可以看到它是运行宁两次。
所以,最后,我的问题是:我怎样才能在 18:00 找到 运行ning 脚本?
潜在 launchd
.plist 位置:
~/Library/LaunchAgents
/Library/LaunchAgents
/System/Library/LaunchAgents
甚至:
/Library/LaunchDaemons
/System/Library/LaunchDaemons
转储 pstree -aps $$
的输出可能会有帮助。 -a
显示命令行参数,-p
显示进程 ID,-s
显示整个进程树直至根,$$
获取当前进程的 PID过程。
这并没有直接回答问题,而是提出了我试图解决的问题存在的原因:
launchd
在启动时加载了 [18:00] 作业,但在停用时无法卸载它。无论发生什么事,都将那份工作与 'new' 的工作分离,所以我失去了对它的控制。重新启动清除了 'phantom' 作业。
有什么方法可以确定 shell 脚本是如何调用的?
我有一个 bash 脚本,它在 macOS 上的熊掌记应用程序的注释中添加了一行。它组成一个 x-callback url 并打开它。
这些是最相关的最后几行(导致这一点的一切都是获取和设置变量值):
#compose URL
theURL="bear://x-callback-url/add-text?id=${noteId}&mode=prepend&new_line=yes&text=$urltext"
#x-callback
open "$theURL"
脚本是 运行 每个工作日通过 launchd
执行一次。这是 .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>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:/usr/local/sbin</string>
</dict>
<key>Label</key>
<string>jobname</string>
<key>ProgramArguments</key>
<array>
<string>/Users/username/Library/Scripts/scriptname.sh</string>
</array>
<key>RunAtLoad</key>
<false/>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key>
<integer>12</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>1</integer>
</dict>
<dict>
<key>Hour</key>
<integer>12</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>2</integer>
</dict>
<dict>
<key>Hour</key>
<integer>12</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>3</integer>
</dict>
<dict>
<key>Hour</key>
<integer>12</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>4</integer>
</dict>
<dict>
<key>Hour</key>
<integer>12</integer>
<key>Minute</key>
<integer>15</integer>
<key>Weekday</key>
<integer>5</integer>
</dict>
</array>
</dict>
</plist>
当我从命令行运行脚本时,当我通过launchd
(如上所述)运行它时,除了18:00(例如12:15 在上面),它按预期执行。
然而,当我在 18:00 将我的 launchd
工作更改为 运行 时,我在注释中看到了重复的行 - 所以我的结论是 2 launchd
工作同时运行宁。
我已经搜索了所有可能的目录 [见下文] 以寻找一个幻影作业 .plist,但是 none。
我修改了脚本,在 运行 时将“$0”和日期时间戳写入文件,因此我可以看到调用的是同一个脚本,而且我可以看到它是运行宁两次。
所以,最后,我的问题是:我怎样才能在 18:00 找到 运行ning 脚本?
潜在 launchd
.plist 位置:
~/Library/LaunchAgents
/Library/LaunchAgents
/System/Library/LaunchAgents
甚至:
/Library/LaunchDaemons
/System/Library/LaunchDaemons
转储 pstree -aps $$
的输出可能会有帮助。 -a
显示命令行参数,-p
显示进程 ID,-s
显示整个进程树直至根,$$
获取当前进程的 PID过程。
这并没有直接回答问题,而是提出了我试图解决的问题存在的原因:
launchd
在启动时加载了 [18:00] 作业,但在停用时无法卸载它。无论发生什么事,都将那份工作与 'new' 的工作分离,所以我失去了对它的控制。重新启动清除了 'phantom' 作业。