【发布时间】:2020-11-27 06:45:49
【问题描述】:
来自mv --help
-n, --no-clobber do not overwrite an existing file
user@pc:~/Desktop/test$ ls -l
total 16
-rw-r--r-- 1 user user 0 ago 6 20:28 bla
-rw-r--r-- 1 user user 0 ago 6 20:28 ble
user@pc:~/Desktop/test$ mv -n bla ble
user@pc:~/Desktop/test$
有没有办法检查命令mv -n的返回值?
是否可以执行类似于$? 的操作来了解该命令是成功(返回 0)移动文件还是失败(返回 1),因为目标文件夹中已经存在另一个同名文件?
【问题讨论】:
-
退出代码会告诉你文件是否被移动/重命名。如果您需要以编程方式分析失败的原因(在非零退出代码的情况下),您可以解析
mv打印的错误消息。 -
@user1934428 "退出代码将告诉您文件是否已被移动/重命名"。这对我来说是不正确的。这就是您的 mv 版本的行为方式吗?我的是 8.28,它的文档指出“非零值表示失败”。同样,POSIX 声明当发生错误时退出值非零。中止移动(使用
mv -i或mv -n)不是失败,我的 mv 相应地以 0 退出。你用的是什么版本的mv? -
这不一样吗?我的 mv (GNU mv) 手册页对退出代码保持沉默,但这是一个通用约定,非零表示失败,对于
mv,失败 is没有搬家,所以我想。如果不是这种情况,您可以执行mv -nv并解析写入标准输出的消息。 -
@user1934428 非零确实意味着失败,但
mv -n foo bar在 bar 存在时不将 foo 移动到 bar 不是失败,该命令成功地按照您在这种情况下的指示进行操作,并将以状态零退出(成功)。