2011-10-26 12 views
19

일부 셸 명령이 있습니다. 출력을 표준 출력에 쓰고 변수에도 저장하고 싶습니다. 한 명령으로 해결하고 싶습니다. 나는 이것들을 시도했다.리디렉션 명령 출력을 ksh의 변수 및 표준 출력으로 출력합니다.

ls > $VAR   # redirects the output to file which name is stored in $VAR 
ls | tee -a $VAR # writes to standard output as well as in file which name is stored in $VAR 
VAR=`ls`   # output into $VAR, but it is not sent to standard output 
VAR=`ls`;echo $VAR # ok, it works but these are two commands 

아이디어가 있으십니까?

+0

1 줄 제한에 대해 궁금합니다. 그게 내가 시스템 대상의 사용자의 뿌리가 아니라 너를 만드는거야. 나는 왜 당신이 그 한계를 가지고 있는지 알 수 없다. 어쨌든 나는 너에게 "doyourself"대답을 올렸다. – erm3nda

답변

46

방법에 대해 :

VAR=$(ls | tee /dev/tty) 
+1

정말 고마워요. –

+0

OS에 따라,'var = $ (ls | tee/proc/$$/fd/1)'도 사용할 수 있습니다. –

+0

완벽하게 작동하는 경우에도 "do-it-yourself way"예제를 게시합니다. Im 리눅스/bash 멍청한데, 그 팁을 배우기를 좋아한다 : D – erm3nda

3

큰 @Gary_Barker에서 대답하지만,이 모든 시스템에 수 없습니다.

우리 팀 팀에는 char-console이 없습니다. 그리고 또 다른 작은 문제가 있습니다.

나는 그것이 문제가되지 않을 경우 같은 ls -1

내 솔루션은 출력 오류 파이프에서 온다, 작동 동일하지 않습니다

VAR=$(ls -1); echo $VAR

를 사용하는 경우.

VAR=$(ls -1 | tee >&2)

+0

결과가 두 줄 이상인 경우 에코를 두 번 인용하십시오. 'VAR = $ (ls -1); echo "$ VAR"'. 그렇지 않으면 한 줄로 뭉개지게됩니다. – hoss

+0

@hoss 왜 이것이 일어날 지 설명 할 수 있습니까? –

0

내가 알고있는 것처럼, VAR=`ls`;echo $VAR는 OK이지만 그것 때문에에이 개 명령이 좋아하지 않는다.

@ Gary-Barker가 작동하는 동안 모든 시스템을 확인하지 않았습니다. 티 또는 다른 문제에 문제가 있다면 자신 만의 것을 만들 수 있습니다.

알고 계시 겠지만 리눅스에서 사용할 수있는 많은 프로그램은 시스템에서 작은 바이너리를 사용하는 코드 일뿐입니다. 이것이 사실이지만 실제로는 1 또는 2 개의 쉼표를 사용하는 것이 중요하지 않습니다. 왜냐하면 최종 실행은 실제로 작은 뭉치이기 때문입니다.

실제 문제는 타겟에 하나의 명령 만 쓸 수 있다면,/sbin 폴더에있는 sh 스크립트를 .sh 확장자없이 남겨두면 자신 만의 "app"을 작성할 수 있기 때문입니다

#!/bin/bash if [ $1 ] then VAR=$*; echo $VAR fi

이 예를 들어 내가 sbin에/varrun/파일을 가지고 이러한

나는 예제로 쓴) 이름으로 ./ 또는 SH 접두사 및하지로 excecuted된다. 나는 성공 (일반) 출력으로 folling 명령으로 그것을 시도했다 : 내가 함께 명령에 "따옴표"를 사용하지 않는 한

  • varrun uname -a
    • varrun ls
    • varrun uname
    • 공백

    관련 문제