验证文件是否移动cmp bash到另一行或将不起作用
我正在bash中运行一个函数,比较两个文件$SRC和$DEST,我正在验证命令是否有效。这是我的工作职责。但是,如果我删除了回音,那么即使它工作了,它也会返回不成功。如果我保留它,它会添加一个额外的空白输出行,并且是成功的。我尝试了以下方法:验证文件是否移动cmp bash到另一行或将不起作用,bash,Bash,我正在bash中运行一个函数,比较两个文件$SRC和$DEST,我正在验证命令是否有效。这是我的工作职责。但是,如果我删除了回音,那么即使它工作了,它也会返回不成功。如果我保留它,它会添加一个额外的空白输出行,并且是成功的。我尝试了以下方法: if [[ cmp -s "$SRC" "$DEST" >/dev/null 2>&1 ]] 这将返回错误。有什么想法吗 copysuccess() { #Variable to track comm
if [[ cmp -s "$SRC" "$DEST" >/dev/null 2>&1 ]]
这将返回错误。有什么想法吗
copysuccess()
{
#Variable to track command
local COM=$1
if cmp -s "$SRC" "$DEST" >/dev/null 2>&1
echo " "
then
echo "$COM was successful"
else
echo "$COM was unsuccessful"
fi
}
更新:
尝试了以下代码,现在输出
cmp:file:是一个目录
我应该注意到这是针对文件和目录的。对不起
另外,如果我移动一个覆盖目录,它不会输出任何内容
Does not work:
cmp -s "$SRC" "$DEST"; [[ "$?" = 0 ]] && echo "$COM was successful" || echo "$COM was unsuccessful"
Does not work:
cmp -s "$SRC" "$DEST" && echo "$COM was successful" || echo "$COM was unsuccessful"
您应该检查已执行命令的返回值,而不是当前方法。我会这样做的:
cmp -s "$SRC" "$DEST" >/dev/null 2>&1 && echo "success" || echo "failure"
由于-s选项会阻止所有输出,因此可以删除其余的输出 最终接受了Jdamian的建议并使用了$ 我创建了一个全局函数,每当输入一个主要函数时,以及当我得到副本部分时,它都会被重置
cp -f $SRC $DEST
TEST=$?
增加了。然后
copysuccess()
{
#Variable to track command
local COM=$1
if [[ $TEST == 0 ]]
then
echo "$COM was successful"
else
echo "$COM was unsuccessful"
fi
}
这是最好的选择,我基本上想要验证命令是否成功运行,我不清楚这一点,并且想要验证副本是否有效,糟糕的是,我的方法很愚蠢,不知道$?在没有回音的情况下对我有效。回音是一个废话。由于echo返回OK,因此始终执行then子句,这意味着如果我移动一个重命名的目录。你是比较还是重命名?更新答案,看看。抱歉,整个脚本是为dos用户自动化linux命令的一部分。重命名与此无关,它使用带有-f选项的copy命令覆盖文件夹,实质上是用现有文件覆盖现有文件。只是用这个来验证cp命令是否有效。@BlackSimth,我认为您可以抑制;[[$?=0]]我不明白@jdamian为什么要显式测试cmp命令返回的代码是否为零然后| |这样做:cmp-s$SRC$DEST和echo success | | echo failurecmp-s$SRC$DEST;[[$?=0]&&echo$COM成功| | echo$COM失败返回unsuccessfull并输出cmp:file:是执行目录操作时的目录。但是复制目录仍然有效fine@Wilken,是否尝试将常规文件与目录进行比较?