首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >连字符(-)在函数内嵌套的管道命令末尾被忽略?

连字符(-)在函数内嵌套的管道命令末尾被忽略?
EN

Unix & Linux用户
提问于 2018-04-13 22:42:32
回答 1查看 150关注 0票数 1

我使用Ubuntu16.04(异种)和Bash 4.3.48(1)。

基于Stephen 在本届会议上的回答,我尝试运行以下命令,作为名为imb()的函数的一部分:

代码语言:javascript
运行
复制
mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" -

我获取了imb()函数所在的文件:

代码语言:javascript
运行
复制
source ~/functions.sh

函数

代码语言:javascript
运行
复制
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错误,调用函数失败:

代码语言:javascript
运行
复制
zip error: Nothing to do! (/var/www/html/db-2018-04-13-22:27:47.zip)

这似乎是因为连字符在某种程度上忽略了;我认为从以下几个方面来看:

代码语言:javascript
运行
复制
type -a imb

其中产出:

代码语言:javascript
运行
复制
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据称忽略连字符?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-04-17 00:03:08

您在您的环境中有一个旧版本的函数,并且在编辑它以添加缺少的-之后,没有重新获取该文件。

当您重新创建文件或重新启动shell时,您获得了您在文件中看到的函数的更正版本。那个版本很管用。

这就是问题的全部,这里没有什么有趣的东西可以解释。这是一种相当常见的情况,即环境最终与设置它的文件不同步,并且经常导致暂时的混乱,但它很容易解决,就像在本例中一样。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/437640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档