У вас, видимо, есть ответ в комментариях. Я бы написал ваш код так, что избавляет от необходимости обращаться к вашим сценариям time
и check.sh
. Это также уменьшает дублирование кода.
#!/usr/bin/expect
# assign command line arguments to variables
# First Argument is Ip Address
# Seond Argument is UserName
# Third Argument is Password
# Fourth Argument is Path to the source File to be copied (Keeping in mind that this path is concatenated with the second path in the program)
# Fifth Argument is the destination path
lassign $argv ip user password file1 file2
set start [clock milliseconds]
set scp_args {-p}
if {[file isdirectory $file1]} {
puts "It is a directory"
lappend scp_args "-r"
set c [exec find $file1 -type f | wc -l]
} elseif {[file isfile $file1]} {
puts "It is a file"
set c 1
} else {
puts "$file1 is a [file type $file1]"
exit 1
}
puts "Number of Files to be copied: $c"
#Set the timeout time for scp command
set timeout 5
#Executes the scp command
spawn scp {*}$scp_args $file1 $user@$ip:$file2
expect "password:"
send "$password\r"
expect eof
close
set end [clock milliseconds]
set elapsed [expr {($end - $start) / 1000.0}]
puts [format "duration: %.3f seconds" $elapsed]
Это означает, что рассматриваемая файловая система была смонтирована во время выполнения проверки, fsck
пришлось фактически изменить данные на -диске, чтобы исправить ошибку, и файловая система не может быть перемонтирована вручную без перезагрузки системы..
В основном это происходит, когда ошибки обнаруживаются (и исправляются )в корневой файловой системе. Если у вас нет действительно причудливой среды initramfs или восстановления, из которой вы проверяете файловую систему, вы запускаете корневую файловую систему во время ее проверки (, поэтому она монтируется только для чтения -).
Из соображений производительности ядро не выполняет повторную проверку кэшированных метаданных для смонтированных файловых систем (, поскольку ничто (кроме fsck
не должно изменять данные на -диске, кроме ядра для смонтированной файловой системы ), поэтому, если fsck
нужно исправить некоторые из этих метаданных, необходимо либо уведомить ядро (, что невозможно в большинстве UNIX-систем ), либо указать пользователю размонтировать файловую систему, а затем смонтировать это снова, чтобы заставить ядро подобрать измененные метаданные. Единственный способ сделать это с корневой файловой системой — фактически перезапустить саму систему.