回答
工具來幫助追查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. 如何知道InnoSetup腳本是否需要重新啓動?
- 2. 我的Perl腳本如何知道它在Win64下運行?
- 3. 如何知道我從哪裏啓動
- 4. 如何知道webkitSpeechRecognition是否啓動?
- 5. 如何知道jenkins是否啓用或不使用shell腳本
- 6. 如何編譯我的Perl腳本以減少啓動時間?
- 7. 如何知道我是否在perl腳本中運行64位或32位Linux?
- 8. Linux Perl TK:如何知道我的腳本的窗口是否是活動窗口?
- 9. Smooch對話活動,我如何知道活動何時啓動?
- 10. 有誰知道如何將此Perl腳本轉換爲PHP?
- 11. 如何知道我的Magento主題是否需要腳本化腳本?
- 12. 我如何知道AlarmManager是否啓動了計時器?
- 13. 我如何知道腳本是否在iframe中運行
- 14. 我如何才能知道我的服務已啓動
- 15. 我如何知道我的lua腳本在Wireshark中運行?
- 16. 如何知道UIImagePickerController的「iris」啓動動畫是否結束?
- 17. bzr如何知道啓動板?
- 18. 如何知道腳本加載
- 19. 如何知道腳本停在哪裏?
- 20. 如何知道MediaScanner是否已啓用?
- 21. 啓動時啓動perl腳本
- 22. 如何從動作腳本3.0知道Flash Player版本
- 23. 如何讓我的BASH腳本知道保存的路徑
- 24. 我的腳本在Perl中的啓動時間總是相同
- 25. 我如何知道c的版本?
- 26. 如何知道Bash腳本中的腳本文件名?
- 27. 如何知道php腳本是HTTPS請求而不是HTTP?
- 28. Perl - 如何知道值的哈希鍵?
- 29. 我們如何知道腳本的執行時間? OOP
- 30. Bash shell腳本:我如何退出並重新啓動腳本?
你爲什麼想要這樣做?在你的例子中,如果你希望你的腳本在交互式(在shell)和非交互式(cron)運行時表現出不同的行爲,你希望使用'isatty'。更糟糕的是,如果你試圖實施某種訪問控制,你會做一些非常錯誤的事情,而且不安全。 – derobert 2010-05-07 01:11:02