假设我有一个简单的愚蠢脚本,它通过结尾删除文件,如下所示:
rm *.uvw *.xyz
Run Code Online (Sandbox Code Playgroud)
如果脚本rm
无法找到至少一个具有指定结尾的文件,则该脚本,或者更准确地说,会在 stderr 上写入消息。
现在让我们说脚本有点大,并且对更多的文件类型做了更多的事情,我对哪些文件类型存在哪些不感兴趣,但是关于不存在的文件类型的抱怨阻碍了其余的我更感兴趣的输出和错误消息,所以我想过滤输出:
rm *.uvw *.xyz 2>&1 | grep -v "No such file or directory"
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下工作正常,但它删除了交互式对话框的消息部分,例如询问是否应删除写保护的文件,因此我在没有相应消息的情况下收到提示。
我不理解这种行为,也找不到任何相关信息。有人可以解释一下吗?
该logname
工具变成不可用前一段时间对于许多用户,因为它依赖于一些已被打破故意出于安全考虑,为讨论在这里。在我阅读讨论时,该功能不太可能恢复。
我使用了一段时间的变通方法,但现在我觉得它们开始站不住脚,所以我正在寻找一个合适的长期解决方案,我很惊讶地看到,似乎没有太多.
最常链接到的解决方案在此处提供,但它源自此处,其中还存在一个提示,即通过环境变量提出的解决方案SUDO_USER
不可移植。
另一个提议的解决方案是创建一个包含用户名的文件并编写一个 bash 别名或类似的来模拟日志名功能,但我不会称其为合适的替代品,至少因为它假设了对环境的一定程度的可控性至少在最起码的情况下,并不总是可能的,更好说。
who
来自此处的解决方案很有趣,但我找不到有关是否存在相关可靠性或可移植性限制的任何信息。
除了这些方法之外,这个领域的空气越来越稀薄,所以我决定在这里提问,希望对这个话题和我的想法有一些新的投入。