1

I'm looking for a way to get command line arguments for a javascript file that is using osascript.

I've tried referencing argv which works with apple script files. I've tried referencing system, and I've tried referencing this.

Documentation appears to be light on the ground ... I've tried multiple searches but I'm either getting node matches or apple script matches.

This is the script I want to pass parameters to.

#!/usr/bin/osascript

console.log(this)

for ( key in this ) {
    console.log(key)
}

var app = Application.currentApplication()
app.includeStandardAdditions = true
var Calendar = Application("Calendar")

var eventStart = app.currentDate()
eventStart = eventStart
eventStart.setDate(eventStart.getDate() + 1)
eventStart.setHours(15)
eventStart.setMinutes(0)
eventStart.setSeconds(0)
var eventEnd = new Date(eventStart.getTime())
eventEnd.setHours(16)

var projectCalendars = Calendar.calendars.whose({name: "csmu"})
var projectCalendar = projectCalendars[0]

var event = Calendar.Event({summary: "Important Meeting!", startDate: eventStart, endDate: eventEnd})
projectCalendar.events.push(event)
event

This is an example run.

./create-event.js '{"calendar":"BD2T-AT"}'
[object GlobalObject]
eventEnd
eventStart
Calendar
event
app
projectCalendar
projectCalendars
Application("Calendar").calendars.whose({_match: [ObjectSpecifier().name, "csmu"]}).calendars.at(0).events.byId("3F6F91B0-06CD-4688-ADED-238BA40915DC")

How do you parse command line arguments for osascript -l JavaScript

4
  • Can you demonstrate how you referenced argv with AppleScript files ? I'm unclear what you mean here. Also, what variables in your JavaScript are supposed to be getting their values from the command line arguments ? Commented Dec 16, 2018 at 2:30
  • on run argv return "hello, " & item 1 of argv & "." end run hints.macworld.com/article.php?story=20050523140439734 Commented Dec 16, 2018 at 2:32
  • 2
    Ah, OK. So it'd basically be function run(argv) { ... }. Commented Dec 16, 2018 at 2:33
  • That's what I guessed! Commented Dec 16, 2018 at 2:36

1 Answer 1

2

I tried creating a run function. That worked!

Example script.

#!/usr/bin/osascript

function run(command_line_parameters){

    command_line_parameters = JSON.parse(command_line_parameters)

    calendar_name = command_line_parameters['calendar']

    summary = command_line_parameters['summary']

    starts = command_line_parameters['starts']
    start_date_time = starts.split(' ')
    start_date = start_date_time[0]
    start_time = start_date_time[1].split(':')

    ends = command_line_parameters['ends']
    end_date_time = ends.split(' ')
    end_date = end_date_time[0]
    end_time = end_date_time[1].split(':')

    var app = Application.currentApplication()
    app.includeStandardAdditions = true
    var Calendar = Application("Calendar")

    var eventStart = new Date(start_date)

    eventStart.setHours(start_time[0])
    eventStart.setMinutes(start_time[1])
    eventStart.setSeconds(0)

    var eventEnd = new Date(end_date)
    eventEnd.setHours(end_time[0])
    eventEnd.setMinutes(end_time[1])
    eventEnd.setSeconds(0)

    console.log(calendar_name,summary,starts,ends)

    var projectCalendars = Calendar.calendars.whose({name: calendar_name})
    var projectCalendar = projectCalendars[0]

    var event = Calendar.Event({summary: summary, startDate: eventStart, endDate: eventEnd})
    projectCalendar.events.push(event)
    event

}

Example run.

./create-event.js '{"calendar":"BD2L-AT", "starts":"2018-12-16 09:00", "ends":"2018-12-16 13:43", "summary":"Created from command line"}'

Which created an event in the BD2L-AT calendar from 09:00 to 13:43 on the 16 of December 2018.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.