In AppleScript it’s possible to get the the POSIX path of the folder the current script is located in using this line:
POSIX path of ((path to me as text) & "::")
Example result: /Users/aaron/Git/test/
What’s the JavaScript equivalent?
In AppleScript it’s possible to get the the POSIX path of the folder the current script is located in using this line:
POSIX path of ((path to me as text) & "::")
Example result: /Users/aaron/Git/test/
What’s the JavaScript equivalent?
Here's a way [NOTE: I NO LONGER RECOMMEND THIS METHOD. SEE EDIT, BELOW]:
note the single quotes surrounding
path
to work with paths with spaces, etc., in the doShellScriptEDIT After being slapped on the hand by @foo for using a fairly unsafe path-quoting method, I'd like to amend this answer with:
If you're going to use this string, of course, you still have to deal with whether or not it has questionable characters in it. But at least at this stage this is not an issue. This also demonstrates a few concepts available to the JXA user, like using the ObjC bridge and
.js
to get the string "coerced" to a JavaScript string (from NSString).Use
-[NSString stringByDeletingLastPathComponent]
, which already knows how to remove the last path segment safely:Alternatively, if you prefer the more dangerous life, you could use a regular expression to strip the last path segment from a POSIX path string. Off the top of my head (caveat emptor, etc):
(Note that the second
replace()
is required to process paths with <2 parts correctly.)I think I found a simpler way to get the parent folder without invoking ObjC.
Lots of interesting solutions above.
Here's mine, which does NOT require ObjC, and returns an object with properties likely to be needed.
Pure JXA code without ObjC involved:
So to sum up what I’m doing now, I’m answering my own question. Using @foo’s and @CRGreen’s excellent responses, I came up with the following:
This is quite close to @CRGreen’s response, however, it’s a bit more terse and I’m importing
Foundation
instead ofCocoa
. Plus, I’m declaring the variables I’m using to avoid accidental globals.