/** * @brief UNIXコマンドを実行する. * @param [in] command_path 実行するコマンドのパス. * @param [in] args 引数リスト. */ - (NSData*)doCommand:(NSString*)command_path args:(NSArray*)args { NSTask *task = [[NSTask alloc] init]; // 標準出力用 NSPipe *out_pipe = [NSPipe pipe]; [task setStandardOutput:out_pipe]; // 標準error NSPipe *err_pipe = [NSPipe pipe]; [task setStandardError:err_pipe]; // Task に command のパスと引数を設定 [task setLaunchPath:command_path]; [task setArguments:args]; // 設定したコマンドを設定した引数で実行 [task launch]; // 標準出力に設定した Pipe からデータを取得する. NSData *data = [[out_pipe fileHandleForReading] readDataToEndOfFile]; return data; }
ここでは例として、PATH を取得する以下のコマンドを実行してみることにします
uroshika$ echo $PATH
これをObjective-Cから実行するには、
- (void)getPath { NSString* command_path = @"/bin/echo"; NSArray* args = @[@"$PATH"]; NSData *data = [self doCommand:command_path args:args]; NSString* result = @""; if (data != nil && [data length]) { result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; } }