想了解@ perldoc.perl.org为getlogin
提供的示例代码行$login = getlogin || getpwuid($<) || "Kilroy";
似乎它尝试从getlogin
或getpwuid
获取用户名,但是如果任何一个失败,请改用Kilroy
。我可能是错的,所以请纠正我。另外,我在以前的脚本中一直使用getlogin()
-getlogin()
和getlogin
之间有什么区别吗?
此代码可防止什么?另外,$<
的作用是什么?我不确定在查找$<
及其作用时要搜索的内容。
编辑
在特殊变量部分中找到了它-仍然不知道为什么需要它,或者在上面的示例中做了什么
$<
此过程的真正uid。
(助记符:这是您来自的uid,
如果您正在运行setuid。)您可以
更改真实的uid和
同时有效的uid
使用POSIX :: setuid()。由于变化
要$ <需要系统调用,请检查$!
尝试更改后尝试检测任何
可能的错误。
编辑x2
这行与上面的示例可比吗? (目前,这是我用来避免“ cron”执行脚本的任何潜在问题的方法-我从未遇到过此问题,但我正尝试避免任何理论上的问题)
my $username = getlogin(); if(!($username)){$username = 'jsmith';}
最佳答案
你说的没错如果getlogin
返回false,它将测试getpwuid($<)
如果返回false,则将$login
设置为“ Kilroy”$<
是该进程的真正uid。即使您在setuid环境中运行,它也将返回启动过程的原始uid。
编辑以匹配您的编辑:)getpwuid
通过UID返回用户名(在标量上下文中,情况就是这样)。如果程序在某个时候切换了UID($<
是它开始时的原始ID),您可能希望将$<
作为一个整数。