Skrypt powłoki AppleScript

0

Jak mogę uruchomić skrypt powłoki na wielu różnych komputerach z tym samym kodem? Jeśli mam to uruchomić

/ users / „my name” / desktop / etc.

to nie będzie działać, gdy użyję go na innym komputerze, ponieważ nazwa użytkownika będzie inna. Czy jest jakiś sposób, aby uruchomić go bezpośrednio bez przeglądania katalogu użytkownika?

Conrad Homan
źródło
Użyłbyś ~/Desktop/blahblahblah. ~Jest skrótem dla „katalogu domowym użytkownika bieżącego”.
Patrick Wynne
Oprócz tego, co stwierdził @PatrickWynne, jeśli odwołujesz się do tych katalogów ze skryptu powłoki, masz również dostęp do powłoki varialbe $USER, która zawiera nazwę folderu domowego. Więc napisałbyś: "/Users/$USER/My Folder"na przykład.
CJK
Nie wspomniano jeszcze o używaniu $HOMEzamiast, ~ponieważ ( ~) może być problematyczne, i zaleca się stosowanie $HOMEgo w przypadku używania do shell scriptw AppleScript.
user3439894,

Odpowiedzi:

1

Wydaje mi się, że szukasz polecenia AppleScript:

(path to Desktop Folder) as text

lub

(path to Desktop Folder)

Ale to zwróciłoby ścieżkę HFS, a opublikowany kod jest ścieżką POSIX, dzięki czemu można ją zmienić na:

set homePath to POSIX path of (path to Desktop Folder) as text

Jak stwierdzono w komentarzu, istnieje $USERdla terminala i na pamięć można nadal wywoływać go w AppleScript za pomocą czegoś takiego:

do shell script "$USER"

Jeśli path to desktop foldernie działa, możesz po prostu spróbować path to desktop.


Edytować

Adresowanie komentarza. Nauczono mnie ścieżki HFS i aliasu były takie same, sprawi, że będzie to kolejne pytanie dla jasności.

Budowanie ścieżki as textjest nawykiem, gdy konkatuje ciągi znaków lub gdybym zamierzał pójść ścieżką i nazwać to później w do shell. Na przykład:

(path to desktop folder)

w Script Debugger zwraca ścieżkę HFS. Po połączeniu katalogu w sposób pokazany w pytaniu PO pojawia się błąd kompilacji z:

(path to desktop folder & "foobar:")

i a

(path to desktop folder) & "foobar:"

kiedy wywoływałem ścieżki za pomocą path to, musiałem je zapisać jako:

(path to desktop folder as text) & "foobar:"

Byłam obca short user name of (system info)i path to home folderale to dobrze wiedzieć. Jednym z problemów tego pytania jest to, że OP oznacza go terminalem i AppleScript, więc rozwiązanie jest nieco skomplikowane.

ʀ2ᴅ2
źródło
Kilka bardzo drobnych uwag: pierwsza linia kodu nie zwraca aliasścieżki; zwraca ścieżkę HFS. Druga linia kodu nie wymaga wymuszania text: POSIX pathzwraca textobiekt. Trzecia linia kodu to niepotrzebne wywołanie skryptu powłoki, ponieważ te same informacje można pobrać za pośrednictwem, short user name of (system info)a także za pośrednictwem system attribute "USER". Podobnie można uzyskać ścieżkę do folderu domowego system attribute "HOME"(i oczywiście zwykłą path to home foldertrasę).
CJK
@CJK zredagowano, aby odpowiedzieć na komentarz
ʀ2ᴅ2
@CJK: zadał pytanie
2ᴅ2
Dobra robota, jeśli zadajesz pytanie, aby uporządkować nieporozumienia terminologiczne. Zostawiłem komentarz do istniejącej odpowiedzi, aby zapytać, czy ma jakieś źródła, które potwierdziłyby to, co mówi, ponieważ sam jeszcze nie znalazłem. Jestem całkowicie skłonny zaakceptować fakt, że bardzo dobrze mogę się tutaj mylić i na pewno jestem teraz o wiele mniej pewny, niż kiedy to napisałem, więc byłoby naprawdę dobrze, gdyby mógł usunąć dla nas niepewność (poprzez co mam na myśli).
CJK
Po przeczytaniu twojej edycji nadal myślę, że w tym miejscu jest zamieszanie w terminologii: „ path to desktop folderw skrypcie debugger zwraca ścieżkę HFS”, co nie jest poprawne. Pomijając na razie dylemat „ścieżka HFS” a | „ścieżka aliasu”, wiemy, że path to desktop folderzawsze zwróci ciąg alias, przez który mam na myśli zarówno specyfikator obiektów AppleScript, jak i klasę o nazwie „alias”. Ciąg dalszy ...
CJK
-1

Wykryje to, jaka jest nazwa użytkownika, za pomocą którego / skryptu się zalogowałeś i przejdzie do tego katalogu. możesz wstępnie wstawić go do skryptu:

     user=`whoami`        
     cd "/Users/$user"
hap32
źródło
1
Zmienna $USERistnieje już w wielu powłokach. Proszę zobaczyć mój komentarz do pytania PO. Ponadto nie byłoby potrzeby umieszczania $USERpoza podwójnymi cudzysłowami. cd "/Users/$USER"jest w porządku.
CJK
Twoja odpowiedź na dwie linie może być odpowiedzią na jedną linię i nie musisz ustawiać nowej zmiennej, userjak już wspomniano, $USERpowinna już istnieć. Nie, żebym użył twojej odpowiedzi, ale gdybym to zrobił, napisałbym ją cd "/Users/$(whoami)"zamiast tego.
user3439894,