我使用 Ubuntu 16.04 (xenial) 和 Bash 4.3.48(1)。
根据 Stephen Kitt在本次会议中的回答,我尝试将以下命令作为名为的函数的一部分运行imb()
:
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" -
我获取了imb()
函数所在的文件:
source ~/functions.sh
功能
imb() {
drt="/var/www/html"
date="$(date +\%F-\%T)"
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" - # Note the hyphen before this comment;
zip -r "all_zipped-$date.zip" "$drt"/ -x "*/cache/*"
rm -f "$drt/db-$date.zip"
}
我的问题
调用函数失败并出现以下zip
错误:
zip error: Nothing to do! (/var/www/html/db-2018-04-13-22:27:47.zip)
这似乎是因为连字符以某种方式被忽略了;我假设从以下方面来看:
type -a imb
输出:
imb is a function
imb () {
date="$(date +\%F-\%T)";
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip";
zip -r "all_zipped-$date.zip" "$drt"/ -x "*/cache/*";
rm -f "$drt/db-$date.zip"
}
我注意到这里缺少的连字符。
我的问题
为什么函数失败/为什么 Bash 据称忽略了连字符?
您的环境中有旧版本的函数,并且在编辑文件以添加缺少的
-
.当您重新获取该文件的资源或重新启动您的 shell 时,您获得了您在文件中看到的函数的更正版本。该版本有效。
这就是它的全部。这里没有什么有趣的解释。这是一种相当常见的情况,环境最终与设置它的文件不同步,并且经常导致暂时的混乱,但在这种情况下很容易解决。