">> file command"는 무엇을합니까? "command >> file"과 어떻게 다른가요?


6

이 투표에서 높게 뽑힌 논평 터미널 커맨드에서`& gt; & gt;`의 의미는 무엇입니까? :

"program before"그게 무슨 뜻 이죠? 명령은 분명하지만 리디렉션은 앞에 붙일 수 있습니다. >> file command

나는 그런 경우를 보았던 것을 기억하지 못한다. - 상향 음향의 양이 주어지면, 그들은 분명히 존재한다. 필자는 형식의 리다이렉션 명령을보고 사용했습니다.

command >> file

사용할 때 >> 및 그 ilk (즉, 2>, 2>&1, 등).

언제 그리고 왜 순서를 바꾸겠습니까? 그것은 모든 것을 의미합니까? stdout 뿐만 아니라에서 리디렉션됩니다 command? 누구에게 구체적인 예가 있습니까?

나는 구글 모든 즉각적인 예를 찾을 수 있습니다.

답변:


6

>> file command
그것은 모든 것을 의미합니까? stdout 커맨드뿐만 아니라 리디렉션됩니까?

이러한 리디렉션은 간단한 명령에 영향을줍니다. 에서 man 1 bash:

명령이 실행되기 전에 쉘에서 해석 한 특수 표기법을 사용하여 입출력을 재 지정할 수 있습니다. [...] 다음 리다이렉션 연산자는 간단한 명령 내에서 선행하거나 나타날 수 있습니다. 리다이렉션은 왼쪽에서 오른쪽으로 나타나는 순서대로 처리됩니다.

"다음 리디렉션 연산자"는 다음과 같습니다. [n]<word, [n]>word, [n]>>word 기타

간단한 명령은 공백으로 구분 된 단어와 리디렉션 뒤에 오는 선택적 변수 지정 순서로, 제어 연산자로 종료됩니다.

제어 운영자
제어 기능을 수행하는 토큰. 다음 기호 중 하나입니다.
|| & && ; ;; ( ) | |& & lt; 새 줄 & gt;

즉, 다음 명령은 동일합니다.

echo Some text >> file
echo Some >> file text
echo >> file Some text
>> file echo Some text

질문에 태그가 지정되었습니다. 나는 인용한다. man 1 bash 하지만 위 명령은 sh 게다가.

명령 줄 파서는 명령을 실행하기 전에 모든 리디렉션을 "제공"해야합니다 (예 : 이러한 리디렉션을 제거한 명령). 그것에 대해 생각해보십시오. 절차는 특정 리디렉션의 위치와 관계없이 동일합니다. 맨 마지막에있을 필요는 없습니다.


언제 그리고 왜 순서를 바꾸겠습니까?

나는 중간에 방향 전환을 원했던 상황을 상기하지 않습니다. 그러나 처음에는 입력 리디렉션을 사용하는 것이 유용합니다. 다음 코드를 고려하십시오.

grep foo file | tail | …

파이프가 매우 길다고 상상해보십시오. 수퍼 유저에게 게시되어 문제를 해결합니다. 그것을 당신의 콘솔에 붙이고 그것을 실행할 수 있습니다. 당신이 오히려 추가하다 일부 명령이나 파이프에? 예 : 당신은 얻고 싶어 :

my_custom_command | grep foo | tail | …
#                   ^^^^^^^^^^^^^^^^^^^ this is the part you'd be happy to paste

제거해야합니다. file 복사 된 명령에서. 이런 이유로 일부 사용자는 다음과 같은 명령을 게시하는 것을 선호합니다.

cat file | grep foo | tail | …
#          ^^^^^^^^^^^^^^^^^^^ it's easy to copy this
#        ^^^^^^^^^^^^^^^^^^^^^ or even this

다른 상황에서는 이것이 전혀 쓸모없는 것입니다. cat. 어떤 사람들은 상황에 관계없이 여전히 그것이라고 말할 것입니다. 어때?

< file grep foo | tail | …
#      ^^^^^^^^^^^^^^^^^^^ it's easy to copy this

아니 cat 편리한 형태!


윈도우에서 echo Some text >file>file echo Some text 결과가 다르다.
phuclv

3

설명

I / O 리디렉션 연산자가 작동하는 방식을 이해하는 핵심은 사용자가 입력하는 모든 명령을 사용하여 STDOUT 또는 STDERR (주로)로 인쇄중인 셸에서 작업하고 있음을 기억하는 것입니다.

>> 상관 없어. 방법 출력은 발생하지만, 발생했을 때 직접 출력하는 파일에 추가 할 수 있습니다. 리디렉션 운영자가 귀하의 명령에 개입하지 않을 것이라는 점을 기억하는 것도 중요합니다. 다음을 입력하여 추가로 테스트 할 수 있습니다. echo hello >> newfile this is my output 그리고 네가 cat newfile 당신은 "안녕하세요, 이것이 내 결과물"이라는 것을 알게 될 것입니다.

이 특별한 경우에는 추가 명령 (& gt; & gt;)과 조합 된 명령의 순서가 반드시 중요하게보아야하는 것은 아닙니다. 대신에 결과 귀하의 명령 중, 위의 카밀 (Kamil)의 의견에 의해 빠져 나온 것처럼. 쉘에서 오류가 아닌 것이 인쇄되는 한, >> 그 일을 할 수 있습니다.

echo 명령의 작업은 표준 출력 (STDOUT)으로 인쇄하는 것입니다. 자체적으로 시험해보십시오. 출력에 새로운 라인이 표시됩니다. 포함 시키면 >> file 믹스에서, 당신은 그 파일에 추가 된 그 줄 바꿈에 무엇이든지있을 것입니다. 이것의 순서 ~이다. 그러나 중요합니다. 추가 할 파일은 연산자를 직접 수행해야합니다.

예제에 대한 참고 사항

구체적인 예를 들어, 나는 당신이 순서를 바꾸는 것이 한 소스에서 다른 소스를 가리키는 두 개의 화살표보다 덜 직관적이거나 읽기 쉽다고 생각하기 때문에 그 중 많은 것을 발견하지 못할 것이라고 말할 것이다. 또한 자세한 쉘 스크립트를 작성할 때 직관적이고 읽기 쉬운 코드가 더 필요합니다.


이것에 대해 더 깊이 이해하고 싶다면, 학습을 시작할 수 있습니다. 파일 기술자 (STDIN, STDOUT, STDERR)과 Unix 시스템 호출 공장. 이것은 모두 유닉스 시스템 프로그래밍의 창과 유닉스 / 리눅스가 어떻게 더 깊은 곳에서 작동하는지 볼 수있다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.