Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用&&;或者在bash脚本的下一行键入第二个命令?_Bash_Boolean Logic - Fatal编程技术网

使用&&;或者在bash脚本的下一行键入第二个命令?

使用&&;或者在bash脚本的下一行键入第二个命令?,bash,boolean-logic,Bash,Boolean Logic,比如说, for files in ../parentdir/*data.txt do command1 > output.txt && mv output.txt $path done 对, for files in ../parentdir/*data.txt do command1 > output.txt mv output.txt $path done 对 for files in ../parentdir/*data.txt d

比如说,

for files in ../parentdir/*data.txt
do
    command1 > output.txt && mv output.txt $path
done
对,

for files in ../parentdir/*data.txt
do
    command1 > output.txt
    mv output.txt $path
done

for files in ../parentdir/*data.txt
do
    command1 > output.txt | mv output.txt $path
done

这些脚本的流程是否存在差异?如果我的command1(使用我无法更改的程序)首先创建output.txt文件,并在文件完成之前不断添加/编辑该文件,我如何确保一旦output.txt完成,我就可以安全地将文件移动到正确的目录?如果output.txt文件名在完成后以任何方式更改,这将容易得多,但不幸的是,它没有更改。

使用
&&&
时,如果第一个命令失败,第二个命令将永远不会执行

在第二个变体中,无论第一个命令的结果如何,第二个命令都将始终执行


让第二个命令的执行取决于第一个命令的结果的想法是:如果尚未创建
output.txt
,则无法移动它。

只有在第一个命令成功时,
&&
才会导致第二个命令执行

这基本上与:

command1
if [ $? = 0 ] ; then
    command2
fi

(其中,
$?
command1
的退出值,成功时应为零)

因此,当我看到我的文件有时不移动时,这意味着第一部分失败。有趣的是,我不知道为什么会失败。一些我必须检查的东西。但是当文件首先被创建,但是东西被添加到其中时,它会自动移动文件吗?我使用的程序将首先创建文件,并在进行各种分析时不断添加/编辑文件。如何克服这一点?还有一种替代编写方法:
if command1;然后命令2;fi
(…Wiimm提出的后一种方法是更好的实践——检查
$?
会产生错误,例如当有人添加
回音来记录日志时,却没有意识到他们正在更改稍后发生的条件的行为)。使用管道“|”而不是&&”怎么样?这是否也意味着无论command1是否失败,mv命令都将执行?