
Ich arbeite an Bash-Code und habe eine Funktion gefunden CheckOtherFiles
, die vermutlich dazu dient, zu überprüfen, ob eine Datei ( $1
) aktueller ist als die Datei $WS_ROOT/$NomeVista/COMP/COMP_COMPILE
.
CheckOtherFiles
wird mit einem Parameter aufgerufen, der eine Datei mit absolutem Pfad ist.
Hier ist der Code:
function CheckOtherFiles {
fver=$1
if [[ -r $fver ]]
then
if [[ -r $WS_ROOT/$NomeVista/COMP/COMP_COMPILE ]]
then
filecheck=`/bin/ls -1t $fver $WS_ROOT/$NomeVista/COMP/COMP_COMPILE | head -1`
if [[ ${filecheck##*/} = ${fver##*/} ]]
then
return 1
fi
fi
fi
return 0
}
Ich habe das Bash-Handbuch gelesen und festgestelltDasnützlicher Link, aber die Bedeutung ist unklar:
if [[ ${filecheck##*/} = ${fver##*/} ]]
Ich bezweifle auch, dass da ein Fehler drin ist.
Könnten Sie mir also bitte helfen, die Bedeutung dieses Codestücks zu verstehen?
Außerdem bin ich für jeden Vorschlag zur Verbesserung dieser Funktion sehr dankbar.
Antwort1
Wie in der verlinkten Frage beantwortet, ist diesTeilzeichenfolgenentfernung:
${string##substring}
Deletes longest match of $substring from front of $string.
In diesem Fall wird der Pfad entfernt und nur derbasename
:
$ FILE=/etc/default/google-chrome
$ echo ${FILE##*/}
google-chrome
$ basename $FILE
google-chrome
Normalerweise würde ich bei bleiben basename
, aber es ist Ansichtssache, ob schreibgeschützter Code besser ist, wenn er schneller ist. Ich sehe darin jedenfalls keinen Fehler.
Sie könnten jedoch die-nt
und -ot
Tests:
f1 -nt f2
file f1 is newer than f2
f1 -ot f2
file f1 is older than f2
Und vielleicht vereinfachen Sie es zu:
other_file="$WS_ROOT/$NomeVista/COMP/COMP_COMPILE"
if [[ -r $fver && -r $other_file && ( $fver -nt $otherfile ) ]]
then
return 1
fi
return 0