Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ericlagergren/go-coreutils
A cross-platform port of GNU's coreutils to Go
https://github.com/ericlagergren/go-coreutils
Last synced: 3 months ago
JSON representation
A cross-platform port of GNU's coreutils to Go
- Host: GitHub
- URL: https://github.com/ericlagergren/go-coreutils
- Owner: ericlagergren
- License: gpl-3.0
- Archived: true
- Created: 2014-11-26T02:39:17.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2018-04-29T13:41:54.000Z (almost 7 years ago)
- Last Synced: 2024-10-30T00:52:38.829Z (3 months ago)
- Language: Go
- Homepage:
- Size: 15.7 MB
- Stars: 749
- Watchers: 31
- Forks: 69
- Open Issues: 88
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Go coreutils
[![forthebadge](http://forthebadge.com/images/badges/made-with-crayons.svg)](http://forthebadge.com)
[![forthebadge](http://forthebadge.com/images/badges/as-seen-on-tv.svg)](http://forthebadge.com)This is a port of GNU's coreutils (http://www.gnu.org/software/coreutils/)
that aims to be a drop-in, cross-platform replacement.**It's currently under development.**
Because it imports from `github.com/EricLagergren/go-gnulib`, and I'm constantly
refactoring, parts could break from day-to-day.I'd recommend running `go get -u ...` before you file a bug report!
*Pull requests are more than welcome.*
Also, see https://www.github.com/EricLagergren/go-gnulib for a similar project that this project depends on.
### Completed:
* 100% Completion
* 15/100
* Partial Completion
* 2/100| Utility | Completeness | Cross Platform | Need Refactor|
|:--------|:---------------|:--------------------|:-------------|
| cat | 100% | Yes (Unix/Windows) | No |
| chown | 0% (* see note #1) | No | Yes (-R) |
| env | 100% | Yes (Unix/Windows) | No |
| false | 100% | Yes (Unix/Windows) | No |
| logname | 100% | No | No |
| pwd | 100% | Yes (Unknown) | No |
| sync | 100% | Yes (Unix/Windows) | No |
| true | 100% | Yes (Unix/Windows) | No |
| tsort | 100% | Yes (Unix/Windows) | No |
| tty | 100% | Yes (Unix/Windows) | No |
| uname | 100% | No | No |
| uptime | 90% | Yes (Unix/Windows, no FreeBSD) | No |
| users | 100% | No | No |
| wc | 100% | Yes (Unix/Windows) | No |
| whoami | 100% | Yes (Unix/Windows | No |
| xxd | 100% | Yes (Unix/Windows) | No |
| yes | 100% | Yes (Unix/Windows) | No |* chown note: Currently refactoring from the ground-up.
**Side notes:**
- Unix *should* include OS X unless otherwise specified.
- Gofmt means it needs its styling changes (e.g. variable names, formatting, etc.)
- Idiomatic means it needs to be changed to more idiomatic Go
- Windows coverage will increase when I get a Windows laptop### Information:
#### Performance:
Obviously there's some things Go can do better (parallelism and concurrency),
but for the most part these tools should have nearly the same speed,
with Go being slightly slower.```
eric@archbox $ time ./wc_go -lwmc one_gigabyte_file.txt
32386258 146084896 1182425560 1183778772 one_gigabyte_file.txtreal 0m25.206s
user 0m24.900s
sys 0m0.313s
eric@archbox $ time wc_c -lwmc one_gigabyte_file.txt
32386258 146084896 1182425560 1183778772 one_gigabyte_file.txtreal 0m22.841s
user 0m22.570s
sys 0m0.257s
```#### Behavior:
These utilities should be nearly identical to GNU's coreutils.
Since parsing the output of shell commands isn't uncommon (even if
it *is* bad behavior), most of the commands should have output that
is nearly identical to the original GNU commands.Do note that sometimes the results could differ a little for select commands.
For example, GNU's `wc` utility relies on the current locale to determine
whether it should parse multi-byte characters or not.The Go version, on the other hand, uses the `unicode/utf8` package
which natively detects multi-byte sequences. The trade-off is this: the
Go version is technically more correct, while the C version is faster.Our implementation of `xxd` is actually much faster than the native `xxd`
implementation found on most *nix machines -- try it out!### REQUIRES:
(Depends on platform and command...)
- go get github.com/EricLagergren/ostypes
- go get golang.org/x/sys/unix
- go get github.com/EricLagergren/go-gnulib/ttyname
- go get github.com/EricLagergren/go-gnulib/sysinfo
- go get github.com/EricLagergren/go-gnulib/posix
- go get github.com/EricLagergren/go-gnulib/general
- go get github.com/EricLagergren/go-gnulib/login### LICENSE:
```
Copyright (C) 2014-2016 Eric LagergrenThis program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.You should have received a copy of the GNU General Public License
along with this program. If not, see .
```#### License subnotes:
It (as a whole) is licensed under the GPLv3 because it's mostly a
transliteration of GNU's coreutils, which are licensed under the GPLv3.However, certain parts have their own licenses (e.g., `xxd` is public domain).