我使用 Ubuntu 16.04 (xenial) 和 Bash 4.3.48(1)。
基于斯蒂芬·基特的回答在本次会议中,我尝试运行以下命令作为名为 的函数的一部分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 据称会忽略连字符?
答案1
您的环境中有该函数的旧版本,并且在编辑该文件以添加缺少的-
.
当您重新获取该文件或重新启动 shell 时,您获得了在文件中看到的函数的正确版本。那个版本有效。
这就是它的全部内容;这里没有什么有趣的东西需要解释。这是一种相当常见的情况,环境最终与设置它的文件不同步,并且经常导致暂时的混乱,但它很容易解决,就像在这种情况下一样。