项目作者: shibukawa

项目描述 :
alice-in -- Alice in VIRTUAL Land This library is for treating virtual environment.
高级语言: Go
项目地址: git://github.com/shibukawa/alice-in.git
创建时间: 2020-08-31T14:00:22Z
项目社区:https://github.com/shibukawa/alice-in

开源协议:Apache License 2.0

下载


alice-in — Alice in VIRTUAL Land

PkgGoDev

This library is for treating virtual environment. This library can handle the following environments:

  • WSL2
  • Docker

For example,

  • From host Windows, you can get environment variables in WSL and exec command in WSL
  • From guest WSL Linux, you can get environment variables in Windows and exec command in Host Windows.

Basic Usage

Environment Detection

  • alicein.IsInWSL(): Detect current Linux environment is on WSL
  • alicein.IsWSLInstalled(): Detect current Windows environment has WSL
  • alicein.IsInDocker(): Detect current environment is in Docker

Path conversion

  • ConvertToHostPath(path string) string

It returns host style path if current env is in WSL.
Otherwise, return input path as is.
Docker doesn’t support this.

  • ConvertToGuestPath(path string) string

It returns guest style path.
Otherwise, return input path as is.
Docker doesn’t support this.

Get Environment

  • alicein.NativeEnvironment() Environment: It is as same as using os package directly
  • alicein.WSLGuestEnvironment() Environment: On Windows and WSL is installed, it returns interface to handle WSL. Otherwise, it returns native environment.
  • alicein.WSLHostEnvironment() Environment: On Linux in WSL, it returns interface to handle Host Windows. Otherwise, it returns native environment.
  • alicein.DetectedEnvironment() Environment: It returns one of Naitve/WSLHost/WSLGuest environment based on parent process.
  • alicein.DockerEnvironment(target) Environment: Detect current environment is in Docker. If target prefixed “image:”, it means image name. Otherwise, it means running container name.

Environment

Environment interface wraps os / os/exec packages. Docker environment only support Exec().

Exec(ctx context.Context, command string, args ...string) *exec.Cmd

It execs commands in current environment.
In Windows’s WSL host environment, exec via “wsl” command wrapper.
In Docker, exec via “docker exec”.

Open(file string)

It opens file by associated program.
On Windows, “start” is used. And “open” is used on mac,
and “xdg-open” is used on other environment.

UserHomeDir() (string, error)

It returns in virtual environment.
Otherwise it returns standard os.UserHomeDir()

UserConfigDir() (string, error)

It returns in virtual environment.
Otherwise it returns standard os.UserConfigDir()

UserCacheDir() (string, error)

It returns in virtual environment.
Otherwise it returns standard os.UserCacheDir()

Environ() map[string]string

It returns environment variables in virtual environment.
Otherwise it returns os.Environment

Sample execution (Linux application inside WSL)

  1. $ go run testdata/detect/main.go
  2. 🐋 alicein.IsInDocker(): false
  3. aliciein.IsInWSL(): true
  4. 🐧 WSL Guest: alicein.WSLGuest()
  5. 🐧 UserHomeDir(): /home/shibu
  6. 🐧 UserConfigDir(): /home/shibu/.config
  7. 🐧 UserCacheDir(): /home/shibu/.cache
  8. Exec(context.Background(), "calc")
  9. WSL Host: alicein.WSLHost()
  10. UserHomeDir(): C:\Users\yoshi
  11. UserConfigDir(): C:\Users\yoshi\AppData\Roaming
  12. UserCacheDir(): C:\Users\yoshi\AppData\Local
  13. Path conversion between 🐧
  14. 🐧 alicein.ConvertToGuestPath(`/usr/bin/yes`): /usr/bin/yes
  15. 🐧 alicein.ConvertToGuestPath(`C:\windows\system32`): /mnt/c/windows/system32
  16. alicein.ConvertToHostPath(`/usr/bin/echo`): \\wsl$\Ubuntu-20.04\usr\bin\echo
  17. alicein.ConvertToHostPath(`C:\windows\system32`): C:\\windows\\system32

License

Apache 2

Contributors