새 소프트웨어를 설치하기 전에 에코를 사용해야하는 이유는 무엇입니까?


25

나는 컴퓨팅 세계에 처음이다. ROS Indigo를 설치하는 동안 첫 번째 단계에서는 다음 코드를 사용하도록 지시합니다.

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

이 문맥에서 왜 echo명령을 사용 sh -c합니까? 다른 설치 프로세스에서도 echo 명령을 사용하는 것을 보았습니다.

참고 -sh 명령 사용 , ROS Indigo 설치 위키


답변:


43

일반적으로 echo명령 기능은 콘솔에 문자열 (텍스트)을 표시하는 것입니다. 그러나 이번에 >echo명령 뒤에 문자가 추가 되어 출력이 텍스트 파일로 리디렉션됩니다 /etc/apt/sources.list.d/ros-latest.list.

기본적으로이 전체 명령은 텍스트 파일을 텍스트 파일에 씁니다. 이제 까다로운 부분이 있습니다.

파일에 기록 된 문자열은 컴퓨터마다 다를 수 있습니다. 명령이 실행될 $(lsb_release -sc)때 부품 이 해결됩니다 (다른 것으로 변경됨) echo.

/etc/apt/sources.list.d/ros-latest.list명령 전후에 텍스트 편집기에서 열어서 변경 사항을 확인할 수 있습니다. (이 명령 전에 파일이 없을 수도 있습니다.)


19
실제로 >텍스트 파일을 덮어 쓰고 >>끝에 추가합니다.
dirkt

3
@dirkt 감사합니다. 내 잘못이야! ;) 여러 스크립팅 언어를 학습 한 결과입니다. 충돌하는 행동은 결국 당신을 괴롭 힙니다. DOS에서도>를 덮어 씁니다.

10
echo콘솔이 아닌 표준 출력에 씁니다.
Michael Hampton

4
"리디렉션되지 않으면 표준 출력은 프로그램을 시작한 텍스트 터미널입니다." 예, echo콘솔에 씁니다.

2

패키지 관리 및 소프트웨어 리포지토리

데비안 기반 Linux 배포판은 리포지토리 (응용 프로그램 설치 패키지 및 업그레이드 패키지의 데이터베이스)를 사용하여 운영 체제를 최신 상태로 유지하고 새로운 소프트웨어 패키지를 쉽게 가져오고 설치할 수 있습니다. 이 리포지토리의 위치는에 저장 /etc/apt/sources.list되지만 일반적으로 특정 응용 프로그램에 고유 한 추가 소스를 /etc/apt/sources.list.d디렉토리에 저장할 수 있습니다 .

package index update 명령 apt-get update이 실행되면 운영 체제는이 패키지 리포지토리에서 사용 가능한 패키지를 확인하고 사용 가능한 소프트웨어를 운영 체제에서 사용 가능한 것으로 등록합니다 apt-get install <package>.

이러한 소프트웨어 소스 중 하나의 예는 다음과 같습니다.

deb http://us-west-2.ec2.archive.ubuntu.com/ubuntu/ trusty main restricted

이 소스가 특정 버전의 Linux 배포판을 참조하는 것이 중요합니다. Ubuntu 14.04의 코드 이름 인 trusty 가 그 예입니다 . shortcodename을 사용 lsb_release -a하거나 lsb_release -sc의미하는 자세한 내용은 OS (데비안 기반)를 쿼리 할 수 ​​있습니다 .

귀하의 질문에 부품 $(lsb_release -sc)이 해석되고 운영 체제의 결과 가 사용자 정의 소스 파일 ros-latest.list에 인쇄 되어 명령 실행시 생성됩니다.


명령 언어 해석기

sh명령입니다 Bourne 쉘 . 이것은 여러 포탄 중 하나이지만 오래된 표준으로 간주되며 일반적으로 확실합니다. bash많은 쉘 스크립트에서 흔히 볼 수 있습니다. 이 선언은 다른 쉘이 다른 구문을 사용할 때 사용할 쉘을 지정합니다.

-c플래그와 관련하여 다음을 인용하십시오 man bash.

-c 옵션이 있으면 문자열에서 명령을 읽습니다. 문자열 뒤에 인수가 있으면 $ 0부터 위치 매개 변수에 지정됩니다.

내부의 모든 것이 ''문자열로 읽히므로 다양한 따옴표를 이스케이프하거나 쉘이 잘못된 방식으로 해석하는 것에 대해 걱정할 필요가 없습니다.


tl; dr

이 명령 deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main은 사용자 정의 소스 파일로 인쇄 $(lsb_release -sc)하여 해석 된 값으로 바꿉니다 .

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