colcon / colcon-core

Command line tool to build sets of software packages
http://colcon.readthedocs.io
Apache License 2.0
103 stars 46 forks source link

Could not find a shell extension for the command environment #590

Closed allbluelai closed 8 months ago

allbluelai commented 1 year ago

Hello, I follow the instructions in ROS2 Foxy Ubuntu source build, but it fails at Build the code in the workspace when I run the command:

colcon build --symlink-install

Result in:

Starting >>> ament_package
Starting >>> ament_lint                        
Starting >>> gtest_vendor                                                      
Starting >>> fastcdr                                           
Finished <<< gtest_vendor [2.19s]                              
Starting >>> gmock_vendor
Finished <<< fastcdr [2.91s]                                   
Starting >>> ament_cppcheck                                    
Finished <<< ament_package [6.21s]                             
Starting >>> ament_cmake_core
Finished <<< gmock_vendor [4.19s]                           
Finished <<< ament_lint [6.87s]                             
Starting >>> cyclonedds
Starting >>> ament_flake8                                       
Finished <<< ament_cppcheck [5.69s]                             
Starting >>> osrf_pycommon
Finished <<< ament_cmake_core [6.24s]                                     
Starting >>> ament_cmake_libraries
Finished <<< ament_flake8 [7.83s]                                    
Starting >>> ament_cmake_export_libraries                            
[34.521s] ERROR:colcon.colcon_core.shell:Exception in shell extension 'sh': Expected ['.', '/home/john/ros2_foxy/build/ament_cmake_libraries/colcon_command_prefix_build.sh', '&&', 'env'] to pass: /bin/sh: 3: /home/john/ros2_foxy/install/ame: not foundre/share/ament_cmake_core/environment/ament_prefix_path.sh: 
/bin/sh: 2: /home/john/ros2_foxy/install/ament_cmake_core/share/ament_cmake_core: not foundt/path.sh: 
/bin/sh: 6: /home/john/ros2_foxy/install/ament_cmake_core/share/ament_cmake_core/environment/path.sh: Syntax error: end of file unexpected (expecting "then")

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/colcon_core/shell/__init__.py", line 306, in get_command_environment
    return await extension.generate_command_environment(
  File "/usr/lib/python3/dist-packages/colcon_core/shell/sh.py", line 154, in generate_command_environment
    env = await get_environment_variables(cmd, cwd=str(build_base))
  File "/usr/lib/python3/dist-packages/colcon_core/shell/__init__.py", line 342, in get_environment_variables
    output = await check_output(cmd, cwd=cwd, shell=shell)
  File "/usr/lib/python3/dist-packages/colcon_core/subprocess.py", line 129, in check_output
    assert not rc, f'Expected {args} to pass: {stderr_data}'
AssertionError: Expected ['.', '/home/john/ros2_foxy/build/ament_cmake_libraries/colcon_command_prefix_build.sh', '&&', 'env'] to pass: /bin/sh: 3: /home/john/ros2_foxy/install/ament_cmake_core/share/ament_cmake_core/environment/ament_prefi: not found
/bin/sh: 2: /home/john/ros2_foxy/install/ament_cmake_core/share/ament_cmake_core: not foundt/path.sh: 
/bin/sh: 6: /home/john/ros2_foxy/install/ament_cmake_core/share/ament_cmake_core/environment/path.sh: Syntax error: end of file unexpected (expecting "then")

[34.524s] ERROR:colcon.colcon_cmake.task.cmake.build:Could not find a shell extension for the command environment
Failed   <<< ament_cmake_libraries [4.00s, exited with code 1]       
Aborted  <<< ament_cmake_export_libraries [1.12s]
Aborted  <<< osrf_pycommon [8.05s]                  
Aborted  <<< cyclonedds [48.3s]                                          

Summary: 8 packages finished [1min 13s]
  1 package failed: ament_cmake_libraries
  3 packages aborted: ament_cmake_export_libraries cyclonedds osrf_pycommon
  299 packages not processed

My machine (installed in VMware) info:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.6 LTS
Release:    20.04
Codename:   focal

And it is a new OS with only ROS2 Foxy being installed (follow the instructions above).

The Python is:

$ python3 --version
Python 3.8.10

How could I build ROS2 foxy from source correctly?

cottsay commented 1 year ago

Hi, there's something in your environment variables that the sh shell extension isn't able to parse. Please use the env command to dump your environment variables, redact any sensitive information, and share it with me here so that we can figure out what syntax is giving colcon trouble.

allbluelai commented 1 year ago

Here you go. env.txt

allbluelai commented 11 months ago

Hello, @cottsay I compiled ROS2 Humble Ubuntu source build on Ubuntu 22.04 and it works just fine.

I think ROS2 Foxy might have a problem.

In ROS2 Humble, I use the following build command:

colcon build --cmake-args -DBUILD_TESTING=OFF --packages-skip-build-finished --continue-on-error
cottsay commented 8 months ago

I really don't know what was going wrong here, but I'm glad you were able to move forward. Feel free to reopen this ticket if the problem resurfaces.