我今天遇到了一个 Bash 脚本,它的函数名称中带有双冒号::
,例如,file::write()
和file::read()
. 我以前从未在 Bash 脚本中看到过这种语法,当我调用该脚本时,它运行得很好(令我惊讶)。
在我的系统(和在线)上搜索 Bash 的手册页后,我在文档中找不到任何支持函数名称语法的内容。例如,该部分Shell Defined Functions
将 shell 函数的语法定义为
function name [()] compound-command [redirection]
Run Code Online (Sandbox Code Playgroud)
然后(在手册中的其他地方)令牌name
被定义为
name A word consisting only of alphanumeric characters and
underscores, and beginning with an alphabetic character
or an underscore. Also referred to as an identifier.
Run Code Online (Sandbox Code Playgroud)
没有任何地方提到函数名的双冒号语法。
到目前为止,我发现的对这种双冒号语法的唯一其他引用是在这个Shell 样式指南(请参阅小节Naming Conventions > Function Names
)中,它建议对“包”中的函数名称使用双冒号语法——例如,mypackage::myfunction()
.
函数名称的这种双冒号语法是 Bash shell 的合法特性,还是可能是未记录的特性?如果它是合法的,它在 Bash 手册中的何处记录?我看了又看,但在手册中找不到任何相关内容。我发现最接近的是::
在PATH
环境变量中使用将当前工作目录添加到搜索路径。
例子
function name …
Run Code Online (Sandbox Code Playgroud) 我已经尝试消除许多常见错误,
确保 PATH 可用于 cron
crontab 文件末尾有一个结束线
时区通过以下方式设置:
cd /etc
cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime
Run Code Online (Sandbox Code Playgroud)date
在 bash 中运行,我得到:
Tue Sep 17 15:14:30 SGT 2013
Run Code Online (Sandbox Code Playgroud)
为了检查 cron 是否同时使用,
* * * * * date >> date.txt
Run Code Online (Sandbox Code Playgroud)
在 date.txt 中给出相同的日期输出。
这是我试图执行的脚本:
event.sh
:
#!/usr/bin/env bash
echo data > /root/data.txt
Run Code Online (Sandbox Code Playgroud)
使用crontab -e
,下面的行有效,
* * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1
15 * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试其他一些参数时,希望它会在下午 2.50 运行:
50 14 * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1 …
Run Code Online (Sandbox Code Playgroud) 我有一个像这样有 40 行的文件:
0001.Group admin_group
0001.Users adam, sam, paul, david, jennifer, harry
0002.Group Dev_group
0002.Users mike, pauli, gary, sherry
0003.Group Sec_group
0003.Users david, diana, mike, paul, harry
0004.Group Main_group
0004.Users wilson, robert, samule
Run Code Online (Sandbox Code Playgroud)
我需要使用前缀提取组和用户,并创建一个与组同名的新文件。
应该是这样的:
输出文件名:admin_group
,内容:
0001.Group admin_group
0001.Users adam, sam, paul, david, jennifer, harry
Run Code Online (Sandbox Code Playgroud)输出文件名:Dev_group
,内容:
0002.Group Dev_group
0002.Users mike, pauli, gary, sherry
Run Code Online (Sandbox Code Playgroud)最后,我需要有 20 个新的文本文件。我尝试使用 sed 和 awk 创建两个单独的文件但失败了。我怎样才能在 Bash 或 Python 中得到这个?