1 year ago

#213185

test-img

aronsommer

How check if output of bash script contains a certain string in Objective-C?

I would like to do something if the output of a shell script contains the string "Caddy 2 serving static files on :2015". This is what I have so far but the beach ball is just spinning. It seems it is because of the last command in my bash script which starts a server. There is no exit in the bash script so it does not end. The output of the bash script is correct and I can see "Caddy 2 serving static files on :2015". But it seems this code is only working with a bash script which has a end.

If someone wants to try, here you can download the executable caddy file which I am using in my bash script: https://caddyserver.com/download

- (IBAction)localHost:(id)sender
{
    // execute bash script to start server
    NSTask *task = [[NSTask alloc] init];
    [task setLaunchPath:@"/bin/bash"];
    [task setArguments:[NSArray arrayWithObjects:[[NSBundle mainBundle] pathForResource:@"caddy-start" ofType:@""], nil]];
    
    NSPipe *pipe = [NSPipe pipe];
    [task setStandardOutput: pipe];
    NSFileHandle *file = [pipe fileHandleForReading];
    
    [task launch];
    
    NSData *data = [file readDataToEndOfFile];
    NSString *result = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
    
    NSLog(result);
    
    NSString *string = result;
    NSString *substring = @"Caddy 2 serving static files on :2015";
    if ([string rangeOfString:substring].location != NSNotFound) {
        NSLog(@"Yes it does contain that substring");
    }
    else if ([string rangeOfString:substring].location == NSNotFound) {
        NSLog(@"No it does NOT contain that substring");
    }
}

And here is my bash script:

#!/bin/bash
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
cd "${DIR}"

pwd

#open http://localhost:2015

# kill server if already running
kill -9 $(lsof -ti:2015)
(./caddy_darwin_amd64 stop) &
(./caddy_darwin_amd64 file-server --listen :2015 --root Content/) &

objective-c

nsstring

nstask

0 Answers

Your Answer

Accepted video resources