2014-10-31 5 views
0

컴퓨터에 로그인 한 사용자의 이름과 로그인을 캡처하는 'finger -lp'명령을 실행하는 툴팁 작업을 만들려고합니다.그란트 쉘 명령에서 사용자 이름 캡처

module.exports = function (grunt) { 
     grunt.registerTask('username', '', 
     function() { 
     var done = this.async(); 
     grunt.util.spawn({ 
      cmd: 'finger', 
      args: ['-lp'], 
      opts: {stdio: 'inherit'}, 
      fallback: '' 
     }, function (err, result, code) { 
      console.info('RESULT: ',err, result, code); 
      done(); 
     }); 
     }); 
    }; 

: 여기

Login: abc123      Name: John Doe 
    Directory: /Users/abc123   Shell: /bin/bash 
    On since Thu Oct 30 19:40 (EDT) on console, idle 19:34 (messages off) 
    On since Fri Oct 31 10:24 (EDT) on ttys002 
    No Mail. 

내가 grunt.util.spawn를 사용하여 동일한 명령을 실행하고 방법입니다 터미널에서 실행될 때

여기에 손가락 -lp '의 표준 출력이다 위의 console.info 명령문의 결과는 다음과 같습니다.

[email protected]:~/WorkFiles/john-doe/$ grunt username 

    Running "username" task 
    Login: abc123     Name: John Doe 
    Directory: /Users/abc123  Shell: /bin/bash 
    On since Thu Oct 30 19:40 (EDT) on console, idle 19:34 (messages off) 
    On since Fri Oct 31 10:24 (EDT) on ttys002 
    No Mail. 
    RESULT: null { stdout: '', stderr: '', code: 0, toString: [Function] } 0 

따라서 Grunt 작업이 실행되지 않습니다. 전자 명령 finger -lp은 터미널에 결과를 출력하지만, grunt.util.spawn 프로세스에 의해 캡처되지 않습니다. result 개체의 stdout은 비어 있습니다. 그것은 무엇 grunt.util.spawn 사용 때문에

RESULT: null { stdout: '', stderr: '', code: 0, toString: [Function] } 0 

것은 내가 node의 예를 다음과 같은거야.

답변

0

알아 냈습니다. grunt 명령에서 사용자의 로그인과 사용자 이름을 캡처하는 방법은 finger -lp 명령을 사용하여 스폰 프로세스를 실행하는 것입니다. 그럼 출력에 정규식을 실행합니다.

는 Mac에서 작동합니다

 grunt.registerTask('username', '', 
     function() { 
     var done = this.async(); 
     grunt.util.spawn({ 
      cmd: 'finger', 
      args: ['-lp'] 
     }, function (err, result, code) { 
      var username = ''; 
      var output = result.stdout; 
      if (output) { 
      var matches = result.stdout.match(/Login: ([a-zA-Z0-9]+)[\s\t]+Name: ([a-zA-Z0-9 ]+)/); 
      var login = matches[1]; 
      var name = matches[2]; 
      var username = (name + ' ' + login).toUpperCase(); 
      } 
      grunt.config('developerName', username); 
      done(); 
     }); 
     }); 

이 작업은 내 그런트 과정에서 다른 작업을하기 전에 실행하고 난 다음 그것을 사용할 수있는 grunt.configdeveloperName라는 값으로 username 작업의 출력을 저장 다음과 같은 다른 프로세스 중에는 다음과 같이 입력하십시오.

module.exports = { 

     dist: { 
     options: { 
      cssDir: "public/resources/", 
      sassDir: "src/resources/", 
      quiet: true, 
      environment: "production", 
      outputStyle: "compressed", 
      force: true, 
      banner: "/*! Concatenated on <%= grunt.template.today('mm-dd-yyyy') %> at <%= grunt.template.today('h:MM:ss TT') %> by <%= grunt.config('developerName') %> */\n" 
     } 
     } 

    } 
관련 문제