bash: test file1 -ef file2

03/02/2008 - 01:37 von Andreas Leitgeb | Report spam
Ich hab da ein problem:
Laut (bash) help test:
" ...
" FILE1 -ef FILE2 True if file1 is a hard link to file2.
" ...

Diesen test hab ich in einem shell-script, das ich explizit
per "bash shellscript.sh" starte, aber irgendwie werden
zwei hardlinks auf denselben inode im script nicht als identisch erkannt.

" if [ "$srcf" -ef "tgtf" ]; then
"
" else ...

Und obwohl "$srcf" und "tgtf" zwei hardlinks auf dieselbe
datei enthalten, komm ich in den else-zweig. Fehlermeldung wird
dabei jedenfalls keine geschrieben.

Ein ins script eingebautes
" echo `type [`
liefert mir auch brav:
" [ is a shell builtin

Fuer eine (stichproben-)datei, fuer die er in den else-zweig kommt,
liefert mir aber ein interaktiv eingegebenes

" test dist/3ddesktop_0.2.9-6_i386.deb -ef archives/3ddesktop_0.2.9-6_i386.deb && echo foo

die erwartete Ausgabe "foo", also "weiss" die bash, dass die zwei
Dateien identisch sind. Ausserdem ist amit klar, dass die zwei dateien
auf demselben filesystem sind.

Was kanns da noch haben?

PS: die erste zeile im script ist #!/bin/bash, was aber egal sein
sollte, nachdem ich das script direkt an bash uebergebe.

Hintergrund: ich will zwei directories "synchron" halten, wobei in einem
directory die debian files eventuell mit doppelpunkt herumliegen, im anderen
aber mit %3a statt des Doppelpunktes, wie das eben im /var/cache/apt/archives
so ist. /var/cache/apt/archives ist dabei ein symlink dorthin, wo
eben sowohl "dist" als auch "archives" nebeneinander herumliegt.

PPS: eine google-suche nach "shell test link" hat mich dann erst auf
irgendwie auf "-ef" gebracht, aber warum das nicht funktioniert ... keine Ahnung.
 

Lesen sie die antworten

#1 Thomas Ogrisegg
03/02/2008 - 03:00 | Warnen spam
Andreas Leitgeb wrote on 2008-02-03:
Diesen test hab ich in einem shell-script, das ich explizit
per "bash shellscript.sh" starte, aber irgendwie werden
zwei hardlinks auf denselben inode im script nicht als identisch erkannt.

" if [ "$srcf" -ef "tgtf" ]; then
"
" else ...



Also bei mir funktioniert das ganz wunderbar. Vielleicht postest Du mal
das ganze Shellskript, oder zumindest den Output von 'sh -x $SHELLSKRIPT'

Ähnliche fragen