Bash 如果文件相同,脚本中的cp会更改访问和更改,但不会修改?

Bash 如果文件相同,脚本中的cp会更改访问和更改,但不会修改?,bash,shell,unix,Bash,Shell,Unix,当我在shell中直接执行cp并覆盖一个已经存在的文件时,stat中的Modify属性将与新的时间戳一起使用。但是,当我从脚本运行相同的命令时,它将只更改访问和更改属性,而不更改修改。文件完全相同。为什么会有不同的行为?在stat中,如果文件相同,Modify不会更改吗 我正在运行的命令: for file in $BACKUP_PATH"msghtml/messages.es.po_$deploTime"; do filnam="$(sudo basename $file)"; s

当我在shell中直接执行cp并覆盖一个已经存在的文件时,stat中的Modify属性将与新的时间戳一起使用。但是,当我从脚本运行相同的命令时,它将只更改访问和更改属性,而不更改修改。文件完全相同。为什么会有不同的行为?在stat中,如果文件相同,Modify不会更改吗

我正在运行的命令:

for file in $BACKUP_PATH"msghtml/messages.es.po_$deploTime"; do 
  filnam="$(sudo basename $file)"; 
  sudo cp -v $file "$FEW_PATH/app/translations/"${filnam%%_*}; 
done

您是否也使用
sudo
运行脚本?我建议将
sudo
从脚本中一起删除。这是相同的
cp
命令——根本不是shell的一部分——不管它是否从脚本调用。字面上是一个外部二进制文件,即。
/usr/bin/cp
;它无法知道调用它的shell是否是交互式的。也就是说,您肯定过度使用了
sudo
。例如,
basename
不可能需要
sudo
。无论如何,坦率地说,很难相信在这个问题上提出的核心主张。修改脚本本身以运行
stat
,并显示实际输出将是重新开始的地方:证明所做的声明。(运行<代码> BASH-xYuScript < /Cord>)记录脚本运行的命令,以确保它们是您所期望的也是一个好主意……顺便说一下,还要考虑运行代码并修复它所发现的内容;如果文件名中有空格,则有几个地方的引号被关闭,这会导致错误(可能是与问题相关的错误,因为它们可能导致复制的文件与您认为正在操作的文件不同)。这将显示在
bash-x
日志中,这是在问题中显示它们的另一个原因。