Relativer Pfad zu einem File

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Relativer Pfad zu einem File

    Hallo Leute,
    ich möchte ein Applescript so schreiben, das es auch von anderen Benutzern gebraucht werden kann.

    Quellcode

    1. set myLogFile to open for access POSIX file "/Users/atlas/Library/Logs/extIP.log" with write permission


    Das funktioniert natürlich nur für den Benutzer atlas. Wie muss ich den Pfad schreiben, dass er für alle User geht? Ich hab schon...

    Quellcode

    1. set myLogFile to open for access POSIX file "/Users/~/Library/Logs/extIP.log" with write permission

    ...versucht. Geht aber nicht.
    Die Sprache ist die Wurzel des Missverständnisses.

    var firstName = "Fischers Fritz fischt frische Fische, frische Fische fischt Fischers Fritz"
    firstName = firstName.stringByReplacingOccurrencesOfString("i", withString: "udu")
  • Atalantia schrieb:

    Hallo Leute,
    ich möchte ein Applescript so schreiben, das es auch von anderen Benutzern gebraucht werden kann.

    Quellcode

    1. set myLogFile to open for access POSIX file "/Users/atlas/Library/Logs/extIP.log" with write permission


    Das funktioniert natürlich nur für den Benutzer atlas. Wie muss ich den Pfad schreiben, dass er für alle User geht? Ich hab schon...

    Quellcode

    1. set myLogFile to open for access POSIX file "/Users/~/Library/Logs/extIP.log" with write permission

    ...versucht. Geht aber nicht.


    Nun, ich habe komplett keine Ahnung von Applescript. Aber der richtige Unix-Pfad für das Homedirectory ist ~/ und nicht /Users/~/ …
  • Geht auch nicht:

    Quellcode

    1. set myLogFile to open for access POSIX file "~/Library/Logs/extIP.log" with write permission


    Ergebnis:

    error "Die Datei „file :~:Library:Logs:extIP.log“ wurde nicht gefunden." number -43 from file ":~:Library:Logs:extIP.log" to «class fsrf»


    Die Sprache ist die Wurzel des Missverständnisses.

    var firstName = "Fischers Fritz fischt frische Fische, frische Fische fischt Fischers Fritz"
    firstName = firstName.stringByReplacingOccurrencesOfString("i", withString: "udu")
  • Atalantia schrieb:



    error "Die Datei „file :~:Library:Logs:extIP.log“ wurde nicht gefunden." number -43 from file ":~:Library:Logs:extIP.log" to «class fsrf»


    Hm, guck an: "Relative paths are not supported (except when run from a shell; see below) and tilde expansion is not supported."

    AppleScript stammt halt noch aus der Zeit vor den Klonkriegen. ^^

    Aber, selber Link: "AppleScripts run from the command line can accept arguments (which are passed as a list to the run handler) and can use relative paths."

    Probier's doch mal aus.
  • Ich hab das Problem gelöst mit der Anweisung:

    Quellcode

    1. ​set folderPath to do shell script "echo ~/Library/Logs/extIP.log"
    Die Sprache ist die Wurzel des Missverständnisses.

    var firstName = "Fischers Fritz fischt frische Fische, frische Fische fischt Fischers Fritz"
    firstName = firstName.stringByReplacingOccurrencesOfString("i", withString: "udu")
  • Ja, aber ich brauch den Pfad ja noch tiefer als bis zum Home Folder.
    Die Sprache ist die Wurzel des Missverständnisses.

    var firstName = "Fischers Fritz fischt frische Fische, frische Fische fischt Fischers Fritz"
    firstName = firstName.stringByReplacingOccurrencesOfString("i", withString: "udu")
  • Wenn ich das richtig verstehe wird aber gar nicht das HomeDirectory gesucht sondern die Library, die für alle User gilt und müsste das nicht NSLibraryDirectory in der NSLocaleDomain sein?

    Quellcode

    1. ​NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSLocaleDomainMask, YES)

    [self setSignature:null];
    [[self postCount] increment];

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Mike ()

  • gritsch schrieb:

    ...
    du kannst strings verketten und dann wieder zu pfaden machen oder wie auch immer das in AS funktioniert.


    Also das geht. Der Code den ich gebastelt habe sieht so aus:

    Quellcode

    1. set pathString to "Library:Logs:extIP.log"
    2. set folderPath to ((path to home folder) as string) & pathString
    3. set myLogFile to open for access file folderPath with write permission


    Der erste der funktionierte ist:

    Quellcode

    1. set folderPath to do shell script "echo ~/Library/Logs/extIP.log"
    2. set myLogFile to open for access POSIX file folderPath with write permission


    Welcher ist der bessere?
    Die Sprache ist die Wurzel des Missverständnisses.

    var firstName = "Fischers Fritz fischt frische Fische, frische Fische fischt Fischers Fritz"
    firstName = firstName.stringByReplacingOccurrencesOfString("i", withString: "udu")

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Atalantia ()

  • gritsch schrieb:

    der teil ist doch überflüssig oder "get path to home folder"?

    wenn du schon AS machst, dann bleib bei AS und rufe nicht mal eben für sowas einen shell-command auf.

    Ja, das habe ich schnell entdeckt und gelöscht aber Du warst schneller ;)
    Warum kein shell-command ist der Mix langsamer oder einfach unsauberes Programmieren?
    Die Sprache ist die Wurzel des Missverständnisses.

    var firstName = "Fischers Fritz fischt frische Fische, frische Fische fischt Fischers Fritz"
    firstName = firstName.stringByReplacingOccurrencesOfString("i", withString: "udu")
  • Atalantia schrieb:

    gritsch schrieb:

    der teil ist doch überflüssig oder "get path to home folder"?

    wenn du schon AS machst, dann bleib bei AS und rufe nicht mal eben für sowas einen shell-command auf.

    Ja, das habe ich schnell entdeckt und gelöscht aber Du warst schneller ;)
    Warum kein shell-command ist der Mix langsamer oder einfach unsauberes Programmieren?


    es ist ein umweg und sicher auch langsamer (was in dem fall aber sicher keine rolle spielt).
    soweit es möglich ist sollte man in der gleichen programmiersprache bleiben.
  • Also mit reinem applescript sieht das dann so aus:

    Quellcode

    1. ​set myLogFile to open for access file ((path to home folder as string) & "Library:Logs:extIP.log") with write permission
    Die Sprache ist die Wurzel des Missverständnisses.

    var firstName = "Fischers Fritz fischt frische Fische, frische Fische fischt Fischers Fritz"
    firstName = firstName.stringByReplacingOccurrencesOfString("i", withString: "udu")