回答
工具来帮助追查Perl脚本是如何开始:
getppid
返回父进程ID。然后您可以使用ps
或/proc/<pid>
来获取有关调用过程的更多信息。
$^X
:完整路径的Perl解释器,可以提供一个关于Perl如何从外壳
$0
开始线索,__FILE__
:从命令行调用的脚本的名称,和当前文件名称。如果它们一致,那么当前文件包含从命令行调用的脚本。
@ARGV
:传递给脚本的命令行参数。通过$^X
,$0
和@ARGV
,您确切知道Perl解释器是如何从shell启动的。
caller
:堆栈跟踪信息。如果caller
在脚本开始时返回undef
,那么您位于堆栈的顶部框架,并且您的脚本是从shell调用的。否则,caller
会返回您的脚本被调用的包,文件和行(使用do
或require
)。
$^T
:当前的Perl脚本开始,所以你知道当当前Perl解释器是从外壳开始时间(以秒为自“时代”)。使用scalar localtime($^T)
以更友好的格式查看此值。
在linux上你可以看看/proc/<PID>/
的信息,它应该给你用来启动它的确切命令,以及用户。
如何:ps auxww
在那里您将看到用户名+参数。
您可以使用CORE::getppid()
查找父进程的标识。
Aviatrix删除了一个答案,他说:“尝试使用命令行参数”。这是一个好主意。依赖于无法控制的事物的程序很难测试。在开发脚本时,你真的想从cron运行它来测试“从cron运行”功能吗?没门!
因此,不要让你的脚本猜想它运行的是什么,只是告诉它。然后它不必猜测,然后它就不会错误地猜测(毫无疑问,在凌晨三点)。
可靠的软件是从输入到输出的纯粹功能。没有很好的理由不要添加杂质。 (“我希望它从cron运行时随机地不同)不是一个很好的理由。”
Upvote for programmer education。 – daxim 2010-05-07 12:59:09
- 1. 我的Perl脚本如何知道它在Win64下运行?
- 2. 如何知道webkitSpeechRecognition是否启动?
- 3. 如何编译我的Perl脚本以减少启动时间?
- 4. 如何知道我是否在perl脚本中运行64位或32位Linux?
- 5. 有谁知道如何将此Perl脚本转换为PHP?
- 6. 如何知道我的Magento主题是否需要脚本化脚本?
- 7. 我如何知道AlarmManager是否启动了计时器?
- 8. 我如何知道脚本是否在iframe中运行
- 9. 我如何才能知道我的服务已启动
- 10. 如何知道UIImagePickerController的“iris”启动动画是否结束?
- 11. 如何知道脚本停在哪里?
- 12. 如何知道MediaScanner是否已启用?
- 13. 启动时启动perl脚本
- 14. 如何从动作脚本3.0知道Flash Player版本
- 15. 我的脚本在Perl中的启动时间总是相同
- 16. 如何知道Bash脚本中的脚本文件名?
- 17. 如何知道php脚本是HTTPS请求而不是HTTP?
- 18. 我们如何知道脚本的执行时间? OOP
- 19. 如何用Perl启动多个fire并忘记PHP脚本?
- 20. 如何知道我的程序是否启用了ARC?
- 21. Powershell脚本中的MSBuild - 如何知道构建是否成功?
- 22. 如何知道正在运行的脚本是否死亡?
- 23. 我如何知道我使用的是哪个版本的Javascript?
- 24. 我如何知道我使用的是什么版本的jqgrid
- 25. 我如何知道我运行的是哪个版本的RichFaces?
- 26. 如何知道磁盘是基本的还是动态的?
- 27. 如何自动重新启动脚本
- 28. 如何启动MySQL的shell脚本
- 29. 如何在Perl脚本
- 30. WPF ContextMenu:我如何知道谁启动了它?
你为什么想要这样做?在你的例子中,如果你希望你的脚本在交互式(在shell)和非交互式(cron)运行时表现出不同的行为,你希望使用'isatty'。更糟糕的是,如果你试图实施某种访问控制,你会做一些非常错误的事情,而且不安全。 – derobert 2010-05-07 01:11:02