commandline

2123 readers
4 users here now

founded 2 years ago
MODERATORS
1
 
 

Hello Lemmy,

With this release, bluetuith now works on MacOS. MacOS specific instructions are here: https://bluetuith-org.github.io/bluetuith/Installation/MacOS.html.

(TL;DR Install and run Haraltd and then run Bluetuith)

Bluetuith is a TUI based bluetooth manager, that aims to be an alternative to most bluetooth managers, and can perform bluetooth based operations like:

  • Connection to and general management of bluetooth devices, with device information like battery percentage, RSSI etc. displayed, if the information is available. More detailed information about a device can be viewed by selecting the 'Info' option in the menu or by clicking the 'i' key.

  • Bluetooth adapter management, with toggleable power, discoverability, pairablilty and scanning modes.

  • Transfer and receive files via the OBEX protocol, with an interactive file picker to choose and select multiple files.

  • Handle both PANU and DUN based networking for each bluetooth device (Linux only)

  • Control media playback on the currently connected device, with a media player popup that displays playback information and controls. (Linux only)

I hope you enjoy this release, and any feedback is appreciated.

2
 
 

So I'm sure we've all spent time writing scripts or figuring out CLIs for that one project we're working on, and then kind of go on to forget what we did. Then, when another project comes along later, you wish you had that script again so you could see how you did that thing you did.

Personally, I used to just check random scripts into a repo as a kind of "archive" of all my scripts. But I wanted a better way to organize and use these things.

For years I've been building and collecting these scripts into a CLI that I call Devtools to make it so that each script is a subcommand.

I've had a lot of my friends and coworkers ask me to open-source it so they could use it and see how some things are done in Bash, what tools I use, etc. So...here's that CLI!


But what I'd honestly like is more...

So what are your useful scripts or CLIs you've built? Or what's that script you wrote years ago that you now swear by? Or what's that one application you use daily that just makes your life infinitely easier! I want to grow this collection and feed the addiction!

3
 
 

DotR is a dotfiles manager written in Rust. It supports templating, a centralised configuration, multi-level variables and secrets management, dependency, and package & profile patterns. It's still in Beta. Feedback is welcome!

4
 
 

Ed is customizable, actually. It can have syntax highlighting, interactive commands, and build/REPL setup. Enter rlwrap.

5
 
 

Introducing: Loki! An all-in-one, batteries-included LLM CLI tool

Loki started out as a fork of the fantastic AIChat CLI, where I just wanted to give it first-class MCP server support. It has since evolved into a massive passion project that's a fully-featured tool with its own identity and extensive capabilities! My goal is to make Loki a true "all-in-one" and "batteries-included" LLM tool.

Check out the release notes for a quick overview of everything Loki can do!

What Makes Loki Different From AIChat?

  • First-class MCP support, with support for both local and remote servers
    • Agents, roles, and sessions can all use different MCP servers and switching between them will shutdown any unnecessary ones and start the applicable ones
    • MCP sampling is coming next
  • Comes with a number of useful agents, functions, roles, and macros that are included out-of-the-box
  • Agents, MCP servers, and tools are all managed by Loki now; no need to pull another repository to create and use tools!
    • No need for any more *.txt files
  • Improved DevX when creating bash-based tools (agents or functions)
    • No need to have argc installed: Loki handles all the compilation for you!
    • Loki has a --build-tools flag that will build your bash tools so you can run them exactly the same way Loki would
    • Built-in Bash prompting utils to make your bash tools even more user-friendly and flexible
  • Built-in vault to securely store secrets so you don't have to store your client API keys in environment variables or plaintext anymore
    • Loki also will inject additional secrets into your agent's tools as environment variables so your agents can also use secrets securely
  • Multi-agent support out-of-the-box: You can now create agents that route requests to other agents and use multiple agents together without them trampling all over each other's binaries
  • Improved documentation for all the things!
  • Simplified directory structure so users can share full Loki directories and configurations without massive amounts of data, or secrets being exposed accidentally

What's Next?

  • MCP sampling support, so that MCP servers can send back queries for the LLM to respond to LLM requests. Essentially, think of it like letting the MCP server and LLM talk to each other to answer your query
  • Give Loki a TUI mode to allow it to operate like claude-code, gemini-cli, codex, and continue. The objective being that Loki can function exactly like all those other CLIs or even delegate to them when the problem demands it. No more needing to install a bunch of different CLIs to switch between!
  • Integrate with LSP-AI so you can use Loki from inside your IDEs! Let Loki perform function calls, utilize agents, roles, RAGs, and all other features of Loki to help you write code.
6
7
 
 

I've been using khal for years now, and I like everything about it except that it's written in Python and breaks every nine months when some dependency pulls an Idiot. Then it can take a while for the dev to notice and push out a fix, and a while longer for it to make it out through AUR (no shade; it's FOSS, and I'm grateful for it. We all have ourpriorities), during which time doing calendar stuff is hard. I'm looking for an alternative.

I'm aware of:

  • calcure, which is also Python, but in addition can't edit events except in the most broad way
  • calcurse, which is compiled (whew!) except that it ignored established standards and invented it's own bespoke DB format. The DB is One Big File, and it's ASCII, so it's not impossible; but neither is it an RFC like ical

I do not want to use venv, although I may end up having to. Unless, of course, one of you fine gentlepersons can suggest some tool I've missed that will fit the bill:

  • Preferrably with a TUI; although if it's just commands that can print a semblance of a traditional calendar & agenda, and has some sort of interface for creating and editing entries, that would work, too. I just don't want to be manually editing ics files. ics is great, but it's a computer format.
  • Stores calendar entries in RFC 5545 (et al), preferrably in a directory, so that it works with the cornucopia of vdir-based caldav syncers.
  • Most importantly, is compiled. Even better if I can statically compile the thing, so that it won't ever¹ break unless I do something specifically to it that breaks it.

I don't think I have any other asks for it; it doesn't need to alert me, or issue remindors, or send notifications, or anything else; I have a mobile app and other programs for that. I don't care what it's written in.

1: For reasonable values of "ever"

8
 
 

Use ln -sf to update a symlink after each cron run:

0 */8 * * * TIMESTAMP=$(date +\%Y-\%m-\%dT\%H;\%M;\%S) && LOG="$HOME/logs/${TIMESTAMP}_job.log" && /path/to/script.sh >> "$LOG" 2>&1 && ln -sf "$LOG" "$HOME/logs/latest_job.log"

Any active communities where I can learn more cool things like this?

9
 
 

These utilities aren't particularly new, but I thought that I'd mention them for folks who might not have seen them or only used one or the other. I remember some time before I discovered each back in the day, because so many people just use graphical tools on laptops to manage WiFi.

Both are part of the current network-manager package in Debian Trixie, so not exactly hard to find; they're probably installed on most systems already.

nmtui provides a very simple, limited, ncurses-based, menu. It's mostly useful to select a WiFi network and connect to it. It can't do a number of important things, like trigger rescans or show authentication type on a WiFi network.

nmcli can be used in conjunction with nmtui to address some of its limitations. nmcli device wifi will show the list of reachable WiFi networks, including the technical details (auth data, speed) that nmtui doesn't.

10
 
 

Managarr v0.6.0 has been released with some fun new features!

Managarr is a terminal-based application for managing all your Servarr instances from one place. It provides a user-friendly interface to interact with your media libraries, making it easier to manage your downloads, monitor your series and movies, and perform various actions directly from the terminal.

It sports two modes: a TUI mode (Text User Interface) and a CLI mode (Command Line Interface).

TUI mode gives you an interactive User Interface right inside your terminal window, allowing you to navigate through your Sonarr and Radarr libraries, view details about your series and movies, and perform actions like adding or removing items, all through keyboard shortcuts.

CLI mode lets you execute commands directly from the terminal to manage your Servarr instances without needing to open the TUI. This is great for quick tasks or for integrating with scripts and automation tools.

The biggest change: Managarr now has themes!

The UI has been completely overhauled to support themes! You can now customize the look and feel of Managarr to suit your preferences. Choose from a variety of themes to change the color scheme and overall aesthetic of the application.

Here's just a few examples:

Default

default

Dracula

dracula

Watermelon Dark

watermelon-dark

You can also customize the themes to your heart's content! Check out the themes documentation for more details on how to create and apply your own themes.

Features

  • Added support for alternative Vim-like navigation keybindings (hjkl movements) Discussion #34
  • Added support for terminal-like backspace operations (Ctrl-h instead of Backspace)
  • You can now specify the number of downloads to fetch from the CLI: managarr <sonarr/radarr> list downloads --count 1234
  • You can now toggle movie monitoring from the CLI without needing to use the edit subcommand: managarr radarr toggle-movie-monitoring --movie-id 1234 #43
  • You can also now toggle series monitoring from the CLI without needing to use the edit subcommand: managarr sonarr toggle-series-monitoring --series-id 1234 #43
  • You can now also toggle movie/series monitoring directly from the Library view for each Servarr with the m key. No need to open the Edit [Series/Movie] modal anymore to simply toggle monitoring for an item! #43
  • Users can now skip up/down tables 20 items at a time using Ctrl-d and Ctrl-u keys (mirroring the same functionality in the Helix editor). Alternatively, the standard PgUp and PgDown keys are supported for the same operation. This is particularly useful for large libraries with many items #45
  • The total disk usage for any given series is now displayed in the Series Library view to mirror Radarr functionality #44
  • All keybindings and help tips have been refactored into a unified, dynamic menu that displays the available keybindings for the current view. This is accessible by pressing ? in any view, and it will display the keybindings relevant to that view. #32
  • Users can now add any number of custom headers to each Servarr's configuration, enabling support for OAuth and other custom authentication schemes for Servarr access #47

Fixes

  • Fixed a bug that caused the Collection Details modal to vanish when attempting to add a new film to a collection
  • Fixed a bug that caused the Radarr library to be rendered, then the Collections table to be rendered over it (merging the two), and then showing a popup which made for ugly and confusing UI
  • Wrapped Season.statistics with Option to prevent a panic if the season doesn't have any statistics (edge-case, only happens with outdated Sonarr data) #35
  • Corrected a bug that caused double key presses on Windows machines #40 (Thanks @cwesleys!)
  • Defaulted to empty tags to improve fault tolerance within the Sonarr and Radarr UIs. This is in response to #42, #48. It seems like this may be a bug in Sonarr where a series can have an associated tag ID but that tag Id doesn't exist in the list of tags, but I still can't quite track it down.
  • Fixed an issue that caused some panics to occur when video codecs are undefined in file metadata #38
  • More than 10 downloads will be listed in the Downloads tabs for both Radarr and Sonarr
  • Fixed a bug where Sonarr would have empty values on season releases for seeders/leechers instead of '0'
  • Fixed a bug where some Radarr films don't have studios associated with them, so the studio field is now nullable, preventing crashes when loading the Radarr library

Security Fixes

Minor Changes

  • Due to the new support for Vim-like navigation keybindings, the system logs are now opened using L instead of l
  • Refactored the network module to be more idiomatic Rust and to improve maintainability

Documentation

  • Update README.md to remove the cheeky Try Before You Buy heading since some users reported it as misleading; i.e. they thought it meant Managarr cost money. Managarr is and always will be, free

As always, thank you to everyone who reported an issue or requested a feature! You all make it a LOT easier to keep up with breaking API and add new features. If you have any feedback or suggestions, please don't hesitate to open an issue or discussion on the GitHub repository.

11
 
 

The person running the site had some had some health issues and hasn't posted an update in 2.5 years. However, there's a mountain of awesome command line tools to discover if you go through the backlogs. The daily updates on this site used to be one of the most delightful parts of my day for a long time and a lot of tools that I use and love today were found here.

Enjoy!

12
 
 

Hello Lemmy,

With this release, bluetuith now has initial cross-platform support, and works on Windows. Windows specific instructions are here, tl;dr install haraltd and bluetuith together.

There are no new features introduced, only other optimisations and bug fixes for Linux.

I hope you enjoy this release, and any feedback is appreciated.

General Information

Bluetuith is a TUI based bluetooth manager for Linux, that aims to be an alternative to most bluetooth managers, and can perform bluetooth based operations like:

  • Connection to and general management of bluetooth devices, with device information like battery percentage, RSSI etc. displayed, if the information is available. More detailed information about a device can be viewed by selecting the 'Info' option in the menu or by clicking the 'i' key.

  • Bluetooth adapter management, with toggleable power, discoverability, pairablilty and scanning modes.

  • Transfer and receive files via the OBEX protocol, with an interactive file picker to choose and select multiple files.

  • Handle both PANU and DUN based networking for each bluetooth device

  • Control media playback on the currently connected device, with a media player popup that displays playback information and controls.

13
 
 

tjot is a terminal djot renderer.

Features

  • Covers 100% of the Djot spec
  • Reasonably fast:
    • pandoc -f djot -t ansi: 10 runs, milliseconds per run: [266, σ 270, 274]
    • tjot: 105 runs, milliseconds per run: [24, σ 26, 28]
  • ANSI glyphs & escape codes for nice tables, task lists, and coloring
  • Renders images, including SVGs
  • Detects the terminal size (usually) for accurate wrapping
  • Langage-sensitive highlighting for code blocks, and language detection

tjot is alpha; this is the first version that is useful. That said, it's fairly complete.

What is this?

djot is a markup language related to Markdown created by John MacFarlane, the author of pandoc. For a detailed explanation of why he invented djot, see this essay, but my interpretative summary is that he was unsatisfied with the complexity and size of CommonMark -- a result of trying to maintain compatability with Markdown -- and thought they could do better from scratch. djot was the result.

I've been using djot since late 2022, but as there (until recently) was no terminal pager for djot, I finally decided to write one.

To render djot documents on the command line, install tjot and call it with the path to a file, or pipe the file into tjot on stdin. Pipe the output to a pager such as less.

If the document references images via URL, those will be downloaded and rendered.

Limitations

  • There are known bugs; see the end of the CHANGELOG for a complete list
  • Ultimately, I want a pager. The current version only renders output; paging has to be provided by an external program
  • Customization is non-existent
  • While images are supported, rendering is via asci; there's no sixel, kitty, or other high-res rendering. SVG rendering, in particular, is of particularly questionable quality.

As usual, feedback is welcome, as are any reports of failures. Although this is an early release, the nature of the project is such that getting exposure to a wide variety and complexity of documents will help me improve it.

14
10
Edit is now open source (devblogs.microsoft.com)
submitted 6 months ago* (last edited 6 months ago) by neme@lemm.ee to c/commandline@programming.dev
 
 

Edit is a new command-line text editor in Windows

15
 
 

Crawlio is a simple C tool that slows down I/O operations by adding a specified amount of time to each I/O call. It uses LD_PRELOAD.

  • Test application behaviour under slow I/O conditions
  • Bring back the dial-up nostalgia
  • Learn how to use LD_PRELOAD
16
 
 

Rook provides a secret service a-la secret-tool, keyring, or pass/gopass, except backed by a Keepass kdbx file.

The problem Rook solves is mainly in script automation, where you have aerc, offlineimap, isync, vdirsyncer, msmtp, restic, or any other cron jobs that need passwords and which are often configured to fetch these passwords from a secret service with a CLI tool. Unlike existing solutions, Rook is headless, and does not have a bespoke secrets database full of passwords that must be manually synchronized with Keepass; instead, it uses a Keepass db directly.

Rook is in AUR and in Alpine community (a MR has been submitted for the new version); binaries are available from the project page.

There have been several releases since my last announcement for v0.2.0, 7 months ago. The major thing is that I've added built-in support for the Linux keyring, which makes it much easier to use; since it improves security, I'm hoping this will encourage users to use the feature.

Here are the rest of the changes, collapsed for brevity:

Added

  • built-in support for the kernel keyring on Linux.
  • Go 1.24 landed in Alpine, so off we go!

Changed

  • autotype and getAttr now detect if keyctl is available and in use, and automatically uses it to get the pin. (which should be superceded by ---keyring)
  • the kernel keychain instructions are now independent of external environment variable management, such as herbstluftwm
  • Use Go 1.24's go tool for manpage generation, via go:generate.

Fixed

  • --keyring may not be used with open; this is now prevented, and documented. It never worked, but it would be seen by the server as on open failure.
  • --detach and -P didn't play nicely; now they do
  • URLs in the README (thank, mlc-man!)
  • getPassword() was prompting on STDOUT, which is bad for piping the pin
  • --detach never worked
  • logging was going to stdout
  • some log messages were not being logged, but just printed out
  • PIN authorization had a lot of bugs
  • build assets now contain man pages & other documentation, and arch image CI is fixed
17
 
 

cross-posted from: https://lemmy.world/post/28754519

https://gitlab.com/christosangel/sausage

sausage is a terminal word forming game, written in Bash.

This game was inspired by https://en.wikipedia.org/wiki/Bookworm_(video_game).

https://gitlab.com/christosangel/sausage/-/raw/main/screenshots/word1.png

The aim is to score points by creating words, moving around in six directions in the grid, using consecutive letters.

When the user created longer words, coloured letters appear. The user can score more points by using these coloured letters.

More points can also be scored, when the user manages to create the bonus words.

When smaller words are created, or low point yielding words, red letters appear in the grid. If not used, these red letters will drop one cell in every turn.

When a red letter reaches beyond the bottom of the grid, the game is over.

The user can also reshuffle the letters in the grid, in order to be able to create words. However, there is a price to this action: the existing red letters will drop one cell, all other bonus coloured letters will be lost, and more red letters will appear.

If the score is among the 10 best scores achieved, it makes it in the Top Ten Highscores.

https://gitlab.com/christosangel/sausage/-/raw/main/screenshots/stats.png

18
 
 

This is part of the cross-platform work for bluetuith, and is essentially a demo of the bluetooth-classic library.

This daemon provides a REST API interface to control Bluetooth Classic functions.

Features are:

  • Pairing (with authentication)

  • Connection (automatic and manual profile based connection)

  • Object Push (Send and receive files)

And currently only on Linux, it additionally supports:

  • Bluetooth network tethering (PANU/DUN)

  • Media playback control (AVRCP)

It also provides an interactive API viewer (courtesy of Scalar Docs) via the "/docs" endpoint. Also, it provides an openapi command to output the entire OpenAPI specification of the REST API.

This is currently in preview (i.e. alpha).

Any feedback is appreciated.

19
 
 

https://gitlab.com/christosangel/deshuffle

deshuffle is a terminal word puzzle game, written in Bash.

The simple aim is to put all the given letters in order to find the shuffled word against the clock. The time available after a number of words also reduces, so the game gets harder as it goes.

There is not only one solution to every puzzle. If the user find a word with the same letters, the solution will be accepted.

By default, the adjusted definitions of the words appear in the end of each round.

The game ends when the user fails to find the word in time, or fails to create an acceptable solution altogether.

If the score is among the 10 best scores achieved, it makes it in the Top Ten Highscores.

This game was inspired by https://wordnerd.co/23words/.

20
 
 

Taking about https://starship.rs/

21
 
 

cross-posted from: https://programming.dev/post/27181555

Highlights:

  • Support for Background Jobs
  • Official .deb, .rpm, and .apk packages
  • Custom Command Attributes (@example, @search-terms)
  • std-rfc Module (experiments considered for the std lib)
  • Improvements to LSP
  • Improvements to Reedline Vi-mode
22
 
 

cross-posted from: https://lemmy.world/post/26801933

https://gitlab.com/christosangel/troblo

troblo is a terminal match-three game, written in Bash.

The aim is to place each time a pair of new tiles with fixed orientation on available empty squares of the 6x6 grid, in order to create rows or columns of three or more matching tiles, which will become empty again.

The new pair of fixed orientation tiles is shown each time at the right side of the grid.

The new pair can be placed only if both selected squares are empty.

The game ends when the grid becomes so clogged with unmatching tiles, and there is no place in the grid to drop the new fixed orientation (horizontal or vertical) pair of tiles.

This game was inspired by https://368chickens.com/.

23
 
 
24
 
 

Managarr - A TUI and CLI to help you manage your Servarrs.

Thanks to everyone who contributed to this release, be that in code, issues, or enhancement suggestions! You all help fuel my passion for working on this and it doesn't go unappreciated! 😄

As always, you can try out the changes yourself via the Managarr Demo Site

Breaking Changes

  • Managarr now supports multiple instances of the same Servarr with custom names and ordering. (See Features below) To accommodate this, configuration files must be updated so that all Servarrs listed beneath radarr, sonarr, etc., be updated to be lists, not individual Servarrs. For example: to migrate from the following config:

    radarr:
      host: 192.168.0.78
      port: 7878
      api_token: someApiToken1234
    sonarr:
      host: 192.168.0.89
      port: 8989
      api_token: someApiToken1234
    

    You would change the above configuration to the following:

    radarr:
      - host: 192.168.0.78
        port: 7878
        api_token: someApiToken1234
    sonarr:
      - host: 192.168.0.89
        port: 8989
        api_token: someApiToken1234
    
  • The --config flag has been renamed to --config-fileto make it more clear what it does.

Features

  • Users can now specify multiple instances of the same type of Servarr and give them custom names and ordering. This allows users to manage multiple instances of the same Servarr, such as an Anime and TV Show instance of Sonarr. To configure, add a list of Servarrs under the respective type (e.g. radarr, sonarr, etc.). (#17)

    • You can specify ordering of your Servarrs and how they will appear in the UI via the weight field. The lower the weight, the further to the left the Servarr will appear in the UI.
    • You can also name your Servarrs whatever you wish. This name will be displayed in the UI. For example, to name your Sonarr instances:
      sonarr:
        - name: Anime
          host: 192.168.0.89
          api_token: someApiToken
      
        - name: TV Shows
          host: 192.168.0.88
          api_token: someOtherApiToken
      
    • This change also required the introduction of a new CLI flag to specify which Servarr you wish to interact with: --servarr-name. This corresponds directly to the value of the name field in your configuration. If you did not specify a name in the configuration, then default names are provided for you corresponding to the Servarr; For example, if you defined two Radarr instances with no names, they will be named Radarr 1 and Radarr 2, respectively.
    • Omitting the --servarr-name flag with multi-instance configurations will default to using the first instance that appears in your config. For example, for the following configuration:
      sonarr:
        - host: 192.168.0.89
          api_token: someApiToken
      
        - host: 192.168.0.88
          api_token: someOtherApiToken
      
      Running managarr sonarr list series will default to interacting with the Sonarr instance at 192.168.0.89. This is the same as running managarr sonarr list series --servarr-name 'Sonarr 1'.
  • API tokens can now be fetched from files instead of needing to be hardcoded (#31). The following is an example config that loads the API token from a file:

    radarr:
      - host: 192.168.0.78
        api_token_file: /home/root/.config/radarr_token
    
  • Configurations now interpolate environment variables (#23). This allows you to load sensitive information from environment variables. For example, to load the API token from an environment variable, you can do the following:

    radarr:
      - host: 192.168.0.78
        api_token: ${MY_RADARR_API_TOKEN_ENV_VAR}
    

    This is available for all fields in the configuration file.

Security Updates

Miscellaneous

25
10
submitted 9 months ago* (last edited 9 months ago) by sxan@midwest.social to c/commandline@programming.dev
 
 

http://xkcd.com/936/

Not worth creating a project for, and it might be interesting to see what changes people would make.

Non-standard dependencies:

  • words, for the dictionary
  • zsh (this will probably work just fine with bash, though, too)
#!/usr/bin/zsh
# Author: @sxan@midwest.social
# 2025-02-23

final=(xargs echo)
count=6
while getopts d opt; do
	case $opt in
		d)
			final=(tr 'A-Z' 'a-z')
			;;
		*)
			printf "Password generator based on the correcthorse algorithm from http://xkcd.com/936//n/n"
			printf "USAGE: %s [-d] [#]\n" "$0"
			printf " -d  make the result all lower case; otherwise, each word will be capitalized.\n"
			printf " #   the number of words to include. Defaults to 6."
			exit 1
			;;
	esac
done
shift $(($OPTIND - 1))
[[ $# -gt 0 ]] && count=$*

shuf -n $((count * 2)) /usr/share/dict/american-english | \
	sed 's/'"'"'.*//; s/^\(\w\)/\U\1/' | \
	sort | uniq | shuf -n $count | xargs echo | \
	tr -d ' ' | $final

What's going on here:

Nearly 30% of the American dictionary (34,242) are words with apostrophes. They could be left in to help satisfy password requirements that demand "special characters," but correcthorse isn't an algorithm that handles idiot "password best practices" well anyway. So, since every word with an apostrophe has a pair word without one, we pull 2·N words to make sure we have enough. Then we strip out the plural/possessives and capitalize every word. Then we remove duplicates and select our N words from the result. Finally, we compact that into a space-less string of words, and if the user passed the -d option, we downcase the entire thing.

Without the user options, this really could be a 1-liner; that's how it started:

alias pony="shuf -n 12 /usr/share/dict/american-english | sed 's/'\"'\"'.*//; s/^\(\w\)/\U\1/' | sort | uniq | shuf -n 6 | xargs echo | tr -d ' '"
view more: next ›