setup.bash와 ~/.bashrc

방금 되던 ros2가 새 터미널에서는 왜 없다고 할까?

증상

새 터미널은 ROS를 모릅니다

2편에서 talker를 띄운 터미널에서는 ros2가 잘 됐습니다. 그런데 새 터미널을 열고 같은 명령을 치면 그런 명령이 없다고 나옵니다. 설치는 그대로입니다. 새 터미널이 설치된 곳을 모를 뿐입니다.

오류 문구는 환경에 따라 조금 다르게 보일 수 있습니다.

이유

source가 위치를 알려 줍니다

ROS 2는 /opt/ros/jazzy에 깔립니다. 쉘은 그 폴더를 모르므로, setup.bash를 source 해서 환경 변수(environment variable)에 위치를 적어 줍니다. 그래야 ros2 명령과 ROS 패키지를 찾습니다.

PATH는 명령을, PYTHONPATH는 파이썬 모듈을, AMENT_PREFIX_PATH는 ROS 패키지를 찾는 목록입니다. 값은 일부만 보였습니다.

터미널마다

설정은 그 터미널에만 남습니다

source로 바꾼 환경 변수는 그 쉘과, 그 쉘에서 띄운 프로그램에만 적용됩니다. 창을 닫으면 사라지고, 새 창은 처음 상태로 시작합니다. 그래서 터미널을 열 때마다 source가 필요합니다.

따라 하기

source 하고 확인합니다

source /opt/ros/jazzy/setup.bash를 친 뒤 printenv | grep -i ROS로 봅니다. ROS_DISTRO=jazzy가 보이면 이 터미널은 준비된 것입니다.

출력 일부만 보였고, 줄 순서는 다를 수 있습니다.

한 번만

~/.bashrc에 적어 둡니다

~/.bashrc는 bash 터미널이 새로 열릴 때마다 읽는 설정 파일입니다. echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc를 한 번만 실행하면, 그 뒤로 여는 터미널은 모두 알아서 source 합니다.

>>는 파일 끝에 덧붙입니다. > 하나면 파일을 덮어쓰니 조심합니다. 두 번 실행하면 같은 줄이 두 번 들어갑니다.

주의

적은 뒤에는 새 터미널을 엽니다

~/.bashrc는 터미널이 열릴 때 한 번 읽힙니다. 이미 열려 있던 터미널에는 바로 적용되지 않으니, 새 터미널을 열거나 source ~/.bashrc를 칩니다. echo $ROS_DISTRO가 jazzy를 내면 성공입니다.

5강에서는 내 워크스페이스의 install/setup.bash를 하나 더 source 합니다. 14강 2편에서는 ~/.bashrc에 두 줄을 더 적습니다.

다음 편

준비는 끝났습니다. 이제 거북이를 띄워 볼까요?

4편거북이를 띄워 보자 2강 목록