2016-05-18 4 views
0

Auf einem alten Solaris, die nur normal Bourne-Shell hat, habe ich nicht in der Lage gewesen, einen einfachen Test, wie richtig zu übersetzen:Konvertieren einen „Test“ richtig von POSIX sh plain Bourne-Shell

[ -d '/export/home/mydir' -o ! -e '/export/home/mydir' -a -d $(dirname '/export/home/mydir') ] 

... wie es unter modernen POSIX-Shells wie Ash, Bash, Ksh, & c unterstützt wird.

Irgendwelche Vorschläge bitte?

+1

Die '$()' Erweiterung funktioniert möglicherweise nicht, versuchen Sie stattdessen Backticks. – jamieguinan

+0

Versucht [-d '/ export/home/mydir' -o! -e '/ export/home/mydir' -a -d 'dirname '/ export/home/mydir''], aber bekam" unbekannter operator'/export/home/mydir '". –

+0

Die Backticks werden im vorherigen Kommentar nicht angezeigt. –

Antwort

2

Versuchen Sie mit Portable Shell Scripting, -a und -o für and und or zu vermeiden. Wie andere bereits angemerkt haben, ist die Erweiterung $() möglicherweise nicht verfügbar, aber Backticks werden es sein.

Versuchen Sie stattdessen:

if [ -d '/export/home/mydir' ] || [ ! -e '/export/home/mydir' ] && [ -d `dirname '/export/home/mydir'` ]; then 

Wenn [ nicht verfügbar ist, können Sie test statt [ und entfernen Sie die Schließung ] s verwenden müssen.

Als Referenz finden Sie hier eine Anleitung zu writing portable shell scripts.

+0

Sollte wahrscheinlich doppelte Anführungszeichen um den Backtick hinzufügen, nur für den Fall, dass wir mit IFS =/aufgerufen werden oder einen Verzeichnisnamen mit Leerzeichen haben ... –

+0

Großartig! Funktioniert wie ein Zauberspruch ... nur, wenn ich gezwungen bin, nur "Test" zu verwenden (keine eckigen Klammern), wie soll ich die Begriffe gruppieren (unter den ANDs und den ORs)? –

+0

OK, verifiziert, dass die Klammern wie gewohnt funktionieren, also kein Problem mit dem Test. Vielen Dank. –

Verwandte Themen