[HN Gopher] My Favorite One Liners
___________________________________________________________________
My Favorite One Liners
Author : mr_o47
Score : 236 points
Date : 2021-05-03 11:01 UTC (12 hours ago)
(HTM) web link (muhammadraza.me)
(TXT) w3m dump (muhammadraza.me)
| jeswin wrote:
| Shameless plug for bashojs (bashojs.org), for the JavaScripters:
|
| A one liner to update all your npm deps to latest. I use this
| quite a lot. basho --import './package.json' pack
| -j pack -j 'Object.keys(x.dependencies)' -m x -e 'npm install
| ${x}@latest'
|
| Explanation of how this works:
|
| 1) Import package.json, call it 'pack'. 2) Put pack in the
| pipeline. 3) map pack to pack.dependencies. 4) flatMap (-m x) to
| remove nesting. Because pipeline is an array, and it contains
| pack.dependencies - another array. 5) Exec command with '-e'
| someguy101010 wrote:
| > This commmand allows you to convert your shell output into an
| image as this makes it much easier than taking a screenshot of
| your shell if you want to share your output with someone.
|
| Why is this becoming a more common practice? There is nothing
| more annoying than a picture of a block of text that I can't
| copy, quote, or modify and send back to someone.
| bluedino wrote:
| > There is nothing more annoying than a picture of a block of
| text that I can't copy, quote, or modify and send back to
| someone.
|
| Don't forget search.
|
| Too many StackOverflow posts start with a screenshot of yum
| errors or mysql logs.
|
| Ugh.
| amelius wrote:
| I imagine that Google can search for text inside images (?)
| bluedino wrote:
| Of course it can. Heck, Evernote did 10 years ago.
| sigzero wrote:
| I do this all the time for validation effort etc. where they
| need an artifact.
| agumonkey wrote:
| friction
|
| sharing a snapshot is guaranteed to be easy to do in two clicks
|
| sharing text is less so, selection is more work, finding a host
| is more work
| gspr wrote:
| My personal theory is that fewer and fewer people spend time on
| actual general computing devices. When confined to
| straitjackets like phones and tablets, people resort to the one
| functionality that is easy to reach for, namely screenshots.
| I'm guessing the habit spreads?
|
| Just look at the amount of garbage "here's my code as a
| screenshot, what's wrong?" questions Stack Overflow has to
| remove each and every single day.
| Ashanmaril wrote:
| I remember reading a few years ago from a teacher that was
| teaching a class that involved using the school computers,
| and a good amount of the kids seemingly didn't comprehend how
| to use a desktop OS with a windowing system. I can't remember
| the specifics but they seemed to only use it within the
| constraints of what they were used to from using smartphones
| and iPads. Like only using 1 app at a time in fullscreen, and
| didn't really understand dragging and dropping between
| different windows.
| makeworld wrote:
| It's better for places where you can't control text wrapping or
| text is limited. Twitter is the main one.
| someguy101010 wrote:
| The only reason to post an image instead of a pastebin is for
| engagement. I understand the engagement practices we are
| subject to on attention marketplaces like twitter, but is it
| that hard to provide a supplemental pastebin link?
| darkwater wrote:
| It's not engagement. It's usability. Way better having the
| image _in context_ than having an external link to a text
| written with fixed width font. Obviously you should ALSO
| provide the link to the text in the tweet so one can easily
| copypaste (if interested in the code /text after seeing the
| image preview)
| PenguinCoder wrote:
| Some locations and people have sites like pastebin blocked,
| but image hosting allowed. Also in case of say technical
| blog posts, a combination of certain text characters might
| trigger a false positive for malware on your site. You
| don't get that problem with images.
| daniellarusso wrote:
| Passive aggressiveness.
| Jeff_Brown wrote:
| Passive _aggression_ ;)
| [deleted]
| noufalibrahim wrote:
| It definitely has some utility especially design/layout
| problems but if you need to type the same thing to reproduce
| it, it's a pain.
| amelius wrote:
| Someone should write a browser plugin that OCRs the text in an
| image and makes it selectable.
| emmelaich wrote:
| Here you go: https://chrome.google.com/webstore/detail/cloud-
| vision/nblmo...
| bhhaskin wrote:
| There are a few of those extensions around. This is a popular
| one https://projectnaptha.com/ It is kinda like magic if you
| ask me.
| modeless wrote:
| This is built into Android 11. Just go into the app switcher
| and you can select text from screenshots or anywhere else.
| graton wrote:
| Maybe just me. I tried the command: ps aux |
| convert label:@- process.png
|
| And got an image that was useless. Nothing readable.
| susam wrote:
| Did you zoom in enough? On my system, it produces an image
| with pixel width of 11000 and file size of 3 MB, so the text
| appears too small when the default image viewer shows it at
| 12% zoom in order to make it fit within the available display
| size. Zooming in to show it at 100% zoom makes the text
| readable.
|
| While this command works fine and is readable too at 100%
| zoom, I wonder why one would do this. Isn't copy-pasting the
| text output of 'ps aux' more convenient than creating a large
| image out of it that is not easy to read, filter, etc.?
| throw7 wrote:
| I had better luck with the netpbm tools:
|
| ps aux | pbmtext | pnmtopng > process.png
| WarOnPrivacy wrote:
| Oh. Now I know what kind of one-liners he meant.
| pnutjam wrote:
| pretty sure it just puts the image of all the lines from the
| screen on top of each other, so it's pretty useless for me
| too. I've been trying to get this to work so I can automate
| screen grabs that are required for some audits we do.
| david422 wrote:
| I dunno, but google photos does an amazing job of taking a
| picture and then just allowing you to select text right out of
| it. Even text with a weird font (possible handwriting?). Kinda
| blows my mind.
| pnutjam wrote:
| We're required to provide screen shot images for system audits.
| Since somehow those are harder to manipulate (much laughter).
|
| And... that command doesn't work for me when I'm using ssh to
| access my servers or using x2go.
| uncomputation wrote:
| 100% agree but I think the motivation is not to purposefully be
| inaccessible but rather to get aesthetically pleasing stylings
| like code highlighting, font choice, editor theme, etc. People
| will always choose the pretty solution over the accessible one,
| unless forced to do otherwise. So, we need to make it easier
| (easier than screenshotting actually) to share code over text
| and yet keep all those sick styles you want. Just look at
| Medium for what NOT to do. Never have I seen a more hostile
| forum for code sharing. Look at GitHub for a decent example.
| There really isn't a good example I'm aware of. Even
| highlight.js I have trouble getting my code to "scroll
| overflow" rather than wrap (which for code can be more
| problematic than it is for regular writing).
| TonyTrapp wrote:
| > There is nothing more annoying than a picture of a block of
| text
|
| Oh, but there is: Videos of bug reports where a person first
| has to explain that they have found a bug, and they will try to
| reproduce it now, and if you're still watching after 3 minutes
| you might see the important 5 seconds of the video, that could
| have been expressed in a few well-written sentences!
| bluedino wrote:
| There was a vendor we had, they used the free version of a
| popular screen recorder for ALL their support tasks.
|
| Put in a ticket asking how to do something? They sent you a
| link to a very slow-moving screencast of going in and turning
| an option on/off or configuring a setting. No audio!
|
| Their knowledge base articles were just a collection of links
| to screen recordings! It was so annoying.
|
| Guess what happened when that company shut the free version
| of their app down...
| tppiotrowski wrote:
| "A picture is worth a thousand words" is an adage many would
| agree with.
|
| People intuitively can 'show' you what's wrong but most non-
| developers will have a hard time phrasing it.
|
| "I press the button and nothing happens" is representative of
| written bug reports I've seen. What button? What's supposed
| to happen? What page are you on? How can I reproduce this?
|
| Almost all issues I've seen with a video I can reproduce. But
| I agree that they should be succinct.
| gweinberg wrote:
| That can depend on what it's a picture of. A picture of a
| block of text is usually not as good as the text as text.
| WarOnPrivacy wrote:
| > Almost all issues I've seen with a video I can reproduce.
| But I agree that they should be succinct.
|
| As long as we retain those opening, over-amplified metal
| riffs. Jump scares are why I watch tech vids.
| wingerlang wrote:
| I love video reports, even bad videos since you can just ask
| for clarification and usually they point out what they were
| trying to show and you get the context from the video.
|
| I like it so much that I've considered implementing always-on
| screen recording in our QA debug builds.
| banana_giraffe wrote:
| My favorite version of this trope is a video of a computer
| screen taken from a poorly held phone. Bonus points if the
| video is in portrait, cropping off important bits of text.
|
| Sure, not everyone's comfortable with a computer, and they
| think they're clever with a solution. I still get annoyed
| when I get one of these videos.
| EvanAnderson wrote:
| Don't forget that the image will also be in HEVC format and
| will be >5MB.
| GuB-42 wrote:
| But which well-written sentences?
|
| If you do a minimum of testing, bugs often depend on context.
| For example, in case of a UI bug, maybe the user zoomed in,
| maybe he is using a non-default font, maybe he is using a
| different locale, maybe he did some action without realizing
| it (ex: scrolling, resizing the window), maybe the time is
| incorrect, etc...
|
| "I click that button and it crashed" isn't going to help you
| there, you know it doesn't crash, you use that button all the
| time...
|
| If it is as straightforward as it looks, watching that 3
| minute video is your punishment for not testing. Yes, I know,
| I don't test either, but don't blame the reporter for it.
| TonyTrapp wrote:
| I agree that a video _can_ provide more context than text
| does. However, most videos I have received as bug reports
| in the past failed to do that. I just saw the user doing
| random stuff leading to random events. I 'd say that often
| the most important thing to have is actually not a well-
| written bug report or a well-made video, but rather having
| access to the user's settings file and logs (if that exists
| for the application), as they often contain the explanation
| of why you don't see what the user sees.
| no-dr-onboard wrote:
| Sounds like you work at H1 :)
| stinos wrote:
| It's pretty handy for gifs where you actually see the problem
| getting reproduced. But for the rest I agree it is getting
| rather annoying. And I honestly don't know why tech-savvy
| people who work on software themselves would do it. It is
| slower and less convenient.
|
| For others it's pretty clear though: taking a smartphone
| picture and emailing it around is probably always faster than
| other means. Plus I'm pretty sure less tech-savy people simply
| have no idea Ctrl-C works nearly everywhere, including shells
| and dialog boxes.
| intergalplan wrote:
| It's faster to do "screenshot area to paste buffer" then paste
| it than to select the text you want (text selection requires
| more precision than just snagging a zone of the screen) and
| fiddle with text formatting on the receiving program (Slack,
| email, whatever). I do it all the time when I just want to show
| someone something short, and don't expect them to need to copy
| it. Bonus: precisely the same workflow works for non-text.
| nine_k wrote:
| You cannot tweet a piece of formatted text. You can sort quote
| it in Facebook, but any formatting like color will be lost, and
| color is often important in terminal output.
|
| So, sadly, the picture is made _exactly_ with the purpose of
| proper quoting, unfortunately losing the textual content :(
| vishnugupta wrote:
| It's convenient to share in a Slack (and similar) channel. At
| least I do it all the time. Also, convenient to attach in an
| RCA doc that's shared with higher ups who don't have time to
| play around with metrics dashboard.
| pwm wrote:
| Here is how I like to share logs/outputs these days:
| ps aux | nc termbin.com 9999
| agumonkey wrote:
| unless it's gonna hug-of-death them, we should promote
| termbin and similar hosts
| scrooched_moose wrote:
| As far as I'm aware, rm -f !(text.txt) isn't enabled by default,
| at least in bash. You have to enable extended globbing by running
| 'shopt -s extglob' first (or add it to your profile).
|
| Great feature though, it adds a ton of extra pattern matching.
| Not (!) is definitely my most used though.
|
| https://www.linuxjournal.com/content/bash-extended-globbing
| prussian wrote:
| Even funner quirk with stuff like that: $
| bash -c 'shopt -s extglob; rm -- !(x)' bash: -c: line
| 1: syntax error near unexpected token `(' bash: -c:
| line 1: `shopt -s extglob; rm -- !(x)'
|
| Because of the strangeness of the bash parser, the glob has to
| come on the preceding line: $ bash -c
| $'shopt -s extglob\nrm -- !(x)'
| nickjj wrote:
| Here's a few functions / aliases I have set up that I use on a
| pretty regular basis: # Generate a random
| password and copy it to the clipboard. pw () {
| pwgen -sync "${1:-48}" -1 | xclip } # Get
| the current weather. weather () { curl
| https://wttr.in/"${1}" } # Get the numeric
| value of a file / directory's permissions. alias
| octal="stat -c '%a %n'"
|
| All of my aliases are listed in my dotfiles at:
| https://github.com/nickjj/dotfiles/blob/master/.aliases
| gav wrote:
| My version of `pw', might be useful to those without `pwgen':
| function genpasswd() { openssl rand 150 | LC_CTYPE=C
| tr -dc '[[:alnum:]!@#$%^&]' | tr -d iIlLOo0 | cut -c
| 1-${1:-12}; }
| nickjj wrote:
| Oh yeah I forgot to mention in the alias comment that it
| depends on pwgen. Thanks for the reminder, I just updated it.
|
| I made a whole video on generating random password from the
| command line and compared a few options (including using
| openssl) at: https://nickjanetakis.com/blog/generate-a-
| random-secure-pass...
|
| The TL;DR for not using openssl is that you're not going to
| get the same amount of characters every time. For example if
| you run yours with 48 characters instead of 12 it won't
| generate 48 characters every time you run it. With pwgen
| (something you can apt or brew install) you know what you're
| getting every time.
| gav wrote:
| If you change `openssl rand 150` to a bigger number, say
| 1000 or so, you can generate longer passwords.
| nickjj wrote:
| Ah, I see.
|
| Did you test your solution on macOS btw? I know macOS
| uses an ancient version of Bash and has different
| binaries that act differently vs Linux (such as sed). I
| don't have a Mac here but I do try to make my dotfiles
| compatible with it. If your solution works on macOS it
| would be nice to drop the pwgen dependency.
| gav wrote:
| I use it on macOS and it works fine. There is a brew
| recipe for pwgen, but that's one more dependency to worry
| about.
| m4r35n357 wrote:
| $ ps aux | convert label:@- process.png convert-
| im6.q16: attempt to perform an operation not allowed by the
| security policy `@-' @
| error/property.c/InterpretImageProperties/3666.
| convert-im6.q16: no images defined `process.png' @
| error/convert.c/ConvertImageCommand/3258.
| m-hilgendorf wrote:
| On MacOS ./very-long-task.sh && say 'success' ||
| say 'fail'
|
| I use it when I need to context switch and leave something
| running. `espeak` is an alternative for `say` on Linuxes.
| j1elo wrote:
| Note ShellCheck's SC2015, especially if you do stuff with
| permanent consequences in the place of "say":
|
| "A && B || C is not if-then-else. C may run when A is true":
|
| https://github.com/koalaman/shellcheck/wiki/SC2015
| banana_giraffe wrote:
| I like this idea a lot, I just dumped a tiny shell script named
| 'tellme' on my mac: #!/bin/bash $@ &&
| say 'The command finished.' || say 'Danger! Something blew
| up!'
|
| To give me a quick way to run commands and hopefully enough
| words to catch my attention.
| the_pwner224 wrote:
| As an audio-free alternative to `say 'success'`, you could use
| `tput bel`. Konsole, and many other terminals, can flash the
| screen or show a normal OS notification when a terminal bell is
| triggered in a non-active terminal window. This doesn't do the
| success/fail thing though.
| whalesalad wrote:
| On macOS you can use "pbcopy" and "pbpaste" to manipulate or read
| from the clipboard.
|
| For instance, format the JSON in your clipboard: pbpaste | jq .
| camel_Snake wrote:
| jq is lovely. python3 has a json formatter built in as well
|
| pbpaste | python3 -m json.tool
| tyingq wrote:
| xclip and xsel for X11: xclip -o | jq
| dijit wrote:
| Or wl-copy / wl-paste on wayland.
| easton wrote:
| If you're on Windows, Set-Clipboard in PowerShell does this too
| and is super handy.
| gbrown_ wrote:
| Sending typescript to a FIFO seems odd. Sure you can see live
| input rather than following a line at a time with tail -f but you
| also lose persistence. To share something live I'd just use tmux
| or screen, granted if you want to ensure the observer has read
| only access there may be a couple more steps than using a FIFO.
| revscat wrote:
| Rails dev. This runs the most recently modified test in your
| spec/ directory: bin/rspec $(find spec -type f
| -exec stat -f '%a %N' {} \; | sort -r | head -1 | awk '{print
| $NF}')
|
| So if you are working on a spec & save it, running this will
| execute that spec & only that spec. I have it hooked up to a
| mapping in neovim, so hitting `<leader>rt` runs the test.
|
| Needs some tweaking, and I'm aware that guard exists. This is
| simpler. Quick & does the job.
| loulouxiv wrote:
| import png:-|xclip -selection clipboard -t image/png -i
|
| Copy a selected rectangle of the screen into clipboard
| smusamashah wrote:
| What is import? Does it read text from image?
| mercora wrote:
| import is part of ImageMagick and "saves any visible window
| on an X server and outputs it as an image file. You can
| capture a single window, the entire screen, or any
| rectangular portion of the screen."
| _def wrote:
| nice! I extended it to a little shell script so it gets written
| to a file, too.
| jolmg wrote:
| > mkfifo hello; script -f hello
|
| > This command will allow you to share your terminal session in
| real time.
|
| Using `script` for this seems nice for when you don't want them
| to be able to control the same computer. Like person foo on their
| computer would nc -l 9000
|
| then you could script -f >(nc foo 9000)
|
| to show them your session. One could also add some encryption to
| the pipe.
|
| If both controlling the same computer is not a problem or is even
| desired, then it's probably simplest to just share a tmux
| session. One runs `tmux` and the other `tmux a`.
| spurgu wrote:
| > One runs `tmux` and the other `tmux a`.
|
| Here's how to do this with screen instead of tmux.
|
| Terminal 1: screen -mS hello # create screen
| named "hello"
|
| Terminal 2: screen -x hello # attach to shared
| screen
| jolmg wrote:
| Just
|
| Terminal 1: screen
|
| Terminal 2: screen -x
|
| seems to be enough, too.
| ansible wrote:
| Neat trick with the named pipe and the script command. Note
| that visual editors (and anything else like ls that are aware
| of the terminal size) will not work well unless all terminal
| windows are the exact same size. And type, obviously.
| jolmg wrote:
| And even then there might be issues. emacs' line numbers
| don't update correctly for one.
|
| At least for vim and htop, having a larger terminal window
| doesn't seem to be a problem as far as I can see.
| banana_giraffe wrote:
| The comment about sharing a terminal using mkfifo reminds me:
|
| Screen has a multi-display mode you can use with "screen -x" that
| lets multiple clients connect to the same session. Useful if you
| want to walk someone through a process.
| secondcoming wrote:
| git checkout -f develop
| zfxfr wrote:
| -> grep * : "If you want to cat bunch of files at once you can
| (use) this command."
|
| Yes but I don't understand the advantage of that instead of
| simply using :
|
| _cat *.*
|
| or if you want to display the filenames :
|
| _tail *
|
| works fine too. Maybe someone can explain.
| petepete wrote:
| A couple of useful ones in here.
|
| However, instead of: git log --format='%aN' |
| sort -u
|
| I'd recommend using git shortlog, as it'll provide you with
| counts. git shortlog -sn
| lqet wrote:
| Nice list, but the descriptions are written like they describe
| the next command, not the previous one. I would not recommend
| doing this to cat a bunch of files ;):
|
| > If you want to cat bunch of files at once you can this command.
|
| > rm -f !(test.txt).
| happimess wrote:
| I added `margin-top: 3em` to `ul, ol, dl` and it is much more
| readable.
| geocrasher wrote:
| I'd strongly recommend horizontal rules or something else
| that will more definitely demarcate each item.
| jonplackett wrote:
| Totally got the same confusion.
|
| I hope whoever follows this blindly doesn't lose too many files
| they wanted to cat.
| boojing wrote:
| I thought these would be jokes!
| criticas wrote:
| The first joke oneliner I learned, circa 1980:
|
| 1: gotta light?
|
| No match.
|
| Quickly followed by:
|
| 2: Could you beat up superman?
|
| No match.
|
| Oh, the days when csh was cool and not retro.
| KMnO4 wrote:
| I remember someone showed this to me on a vintage Mac:
|
| $ bill gates
|
| Did you mean "kill gates"?
| throwaway744678 wrote:
| $ %blow No such job
|
| We had fun times.
| FirstLvR wrote:
| there is a couple jokes in there
| z5h wrote:
| Speaking of one liners... is there a way to get w3m or lynx to
| print a PRETTY formatted output to the console and exit? Seems
| all the dump commands are for plain text. Hoping someone here
| knows as this arcane knowledge doesn't seem to exist elsewhere.
| tyingq wrote:
| I get decent output by using headless chrome to dump to a pdf,
| then pdftotext (from poppler-utils) to format that as text.
| google-chrome --headless --disable-gpu --print-to-pdf=out.pdf
| https://www.cnn.com pdftotext -layout -nopgbrk out.pdf -
| | less
| dwhitney wrote:
| We should have a "My Favorite One Liners" thread every month like
| we do "Who's Hiring". Some of this is going straight into some
| aliases!
| manjana wrote:
| You might like this:
| https://www.commandlinefu.com/commands/browse
| samstave wrote:
| It would be great to have an aliases library with sections -
| where one may be able to copy a section for a given ch'unk of
| task types..
| geocrasher wrote:
| I use autohotkey to script some of my favorite things, which is
| another great way to get good use out of the command line on
| various systems where I don't necessarily need/want to set up a
| .bashrc.
|
| hotkey: "du-m"
|
| Use: Sort directories by usage:
|
| du -m --max-depth=1 | sort -n
|
| hotkey: "wpinfo"
|
| Use: gets basic WordPress site info:
|
| code for AHK ::wpinfo:: ( echo Home
| URL $(wp option get home) ; echo Site URL $(wp option get
| siteurl);echo "### Plugins ###"; wp plugin list;echo "###
| Themes ###"; wp theme list;echo "### Users ###"; wp user
| list; echo "### Roles ###"; wp role list; wp core verify-
| checksums )
|
| hotkey: awk(1-5)
|
| use: saves me typing something I fat finger every. single. time.
|
| awk '{ print $1 }'
|
| awk '{ print $2 }'
|
| awk '{ print $3 }' etc
|
| AHK: ::awk1::awk '{{} print $1 {}}'
|
| There are others but these are the ones that come to mind. The
| main thing isn't the scripts but the automation. And AHK can save
| a _ton_ of error-prone typing or copy /pasting in these
| scenarios.
| xorcist wrote:
| Of all the things awk can do, I will never understand the
| popularity of echoing an argument.
|
| The same thing in bash would be: $ arg1 () {
| echo $1; } $ arg1 one two three one
|
| Splitting fields is easy with cut: $ echo one
| two three | cut -f 1 -d " " one
|
| Normally you just want to stuff it into a variable in which
| case read is much easier: $ read arg1 arg2 arg3
| < <(echo one two three) $ echo arg1 one
|
| Symbolic names are normally much easier to read than numeric
| positions.
|
| That last example looks a bit weird with <() instead of a pipe,
| but that's just because the right hand side of a pipe is a
| separate shell so setting variables in it is a bit useless.
| It's nothing specific to read.
| criticas wrote:
| Using "wc -l" or "sort | uniq -c | sort" to count and classify
| things.
|
| Count processes and threads by user on Linux:
|
| # ps -Teo euser=,comm= | sort | uniq -c | sort -nr
| FriedrichN wrote:
| Another application of this is counting unique IPs in Apache
| access logs. zgrep -Po '^[0-9.]+'
| /var/log/apache2/test.access.log | sort | uniq -c | sort -n
| CalChris wrote:
| fvi - find vi - recursively grep for a pattern and pass the
| successful files into the editor. I use this to find examples in
| a codebase. Sure, it would be nice to set editor's pattern and
| have it jump to the first occurrence but that has been a bridge
| too far. Maybe I'll try again with VSC. (Yeah, VSC doesn't seem
| to have a way of setting the search pattern.)
| function fvi { grep -rl $1 . | xargs zsh -c 'code "$@" <$0'
| /dev/tty }
| sandreas wrote:
| Maybe some of these could be shared at
| http://www.bashoneliners.com :-)
| dvh wrote:
| I pulled history and my favorite seems to be: pmount sdb1
| fooblat wrote:
| Nice list!
|
| > If you want to cat bunch of files at once you can this command
|
| You can use cat itself for this (and save typing a few
| characters): cat *
| karatinversion wrote:
| That one gave me a giggle too - perhaps the author got told off
| for useless uses of cat too many times?
| enriquto wrote:
| That meme "useless use of cat" is a major pet peeve of
| mine...
|
| It makes no sense. Starting your pipe with cat is alright. I
| make a point of _always_ starting all my pipes with cat, even
| in the cases where it is a bit unnatural.
| tzot wrote:
| It's one more process to run, so `cat single_file | ` can
| be easily substituted with `<single_file `.
| justin_oaks wrote:
| I was going to point this out too.
|
| For those who may not know, you can put the I/O
| redirection anywhere in the command, not just at the end.
|
| So you can write < input_file.txt grep
| some_pattern | grep another
|
| Which has the same effect as grep
| some_pattern < input_file.txt | grep another
|
| but puts the input redirection at the beginning so you
| can easily follow the data flow from left to right.
|
| I use "redirection first" in other cases such as
|
| 1>&2 echo "Error: missing file"
|
| To make it clear up-front that I'm writing to stderr.
| scubbo wrote:
| Wow. Thank you for explaining this! I'd never understood
| why `cat` was called useless when (so far as I then knew)
| there was no other way to "start a left-to-right pipe by
| reading from a file" (other than the aforementioned `grep
| <filename> *`). This helps!
| tzot wrote:
| Or plain `>&2` since the `1` is implied for '>'
| enriquto wrote:
| Yep. Writing "<file " is just as good as "cat file |".
| Still I'm more used to writing cat. The only (marginal)
| advantage of cat over explicit redirection at the
| beginning is maybe that you can split the lines more
| cleanly with cat: cat file |\
| program1 |\ program2 |\ ...
|
| If you use a redirection, since the command does not
| start with a pipe the symmetry is broken.
|
| Redirections at the start of the line are fun. I have an
| alias alias null='>/dev/null
| 2>/dev/null'
|
| this allows to run GUI programs without cluttering the
| terminal with useless GTK/QT warnings:
| null evince file.pdf
| fooblat wrote:
| Pro tip, if a line ends in a | you don't need a trailing
| backslash. The same is true if a line ends in || or && as
| those all imply continuation.
|
| Edit: cat file |
| program1 | program2 | ...
| enriquto wrote:
| wow, that's great. Now what I miss is to be able to put
| comments after each such line.
| probably_wrong wrote:
| There's a natural workflow that tends to get ignored in
| these discussions: when you're not sure of all the
| details of the pipeline yet and your file is big enough
| to slow you down.
|
| I typically start with (say) `head file | grep '2020'`.
| Once it does what I want I move to the next step, and so
| on until it's done. At that point, and having chained 5-6
| commands, replacing `head` with `cat` is faster and less
| likely to break due to me putting the '<' in the wrong
| place. The simplicity and extra peace of mind is well
| worth an extra process IMHO.
| aflag wrote:
| Why always start with cat? Not using cat when you don't
| need to means less typing, more efficient and mor robust
| code. Why use it if you don't need to?
| alpaca128 wrote:
| In many situations it's quicker to just rely on muscle
| memory than coming up with the most efficient way to read
| a few 50kB files.
|
| It's a good thing to be aware of the differences when
| needed, but often the execution speed is not the reason
| for writing a bash script.
| aflag wrote:
| I don't think efficiency matters much in this case, but
| more robust and concise code is better. Most commands
| either take a file as a unnamed argument or you can just
| do something like <filename. But I agree, there may be
| commands where passing the file name is awkward (eg. jq)
| [deleted]
| scrooched_moose wrote:
| I often prefer it in scripts for easier parsing later.
|
| cat file.txt | somemonstrousoneliner
|
| immediately tells me it's reading file.txt and doing
| something with the contents.
|
| Burying the filename deeper in the string makes it harder
| to figure that out.
| petepete wrote:
| It's easier to change the start of a chain that starts
| with cat than if you're passing a filename into your
| first program. Even though it's _technically_ misuse, cat
| can improve composability.
| aflag wrote:
| If it was grey -R . * it'd make more sense. Maybe they just
| missed the -R?
| tzot wrote:
| `grep . *` has different output than `cat` if `*` expands to
| more than one filename: every line is prefixed by the filename
| it exists in.
| gbrown_ wrote:
| The use of grep the author proposes will have each line of
| output prefixed with the name of the file it came from followed
| by a colon. That is if the glob expands to more than one file
| though, if it only expands to a single file then it is
| equivalent to cat. Use of the -h option should be passed to
| grep if the difference in format is something the author wishes
| to guarantee.
| naniwaduni wrote:
| Even when it expands to a single file, it has different
| output when the file contains empty lines.
| justin_oaks wrote:
| I think grep ^ *
|
| would fix that and is just as short.
| lqet wrote:
| My favorite one liner for a pretty and compact graph-like git
| log: git log --graph --abbrev-commit --decorate
| --format=format:'%C(bold blue)%h%C(reset) - %C(bold
| cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold
| yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)-
| %an%C(reset)' --all
|
| Add a global alias: git config --global alias.lg
| "log --graph --abbrev-commit --decorate --format=format:'%C(bold
| blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold
| green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''
| %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all"
|
| Usage: git lg
| fidesomnes wrote:
| You are my new favorite person today.
| MauranKilom wrote:
| Yep, definitely among my top git aliases.
|
| Google/DDG search for "git lg2" should also reliably take you
| to this SO answer to copy the alias from:
| https://stackoverflow.com/a/9074343
| FriedrichN wrote:
| I use this as a one liner script in my PATH to review code before
| I commit it. svn diff "$@" | colordiff | less -R
| -x4
| dwhitney wrote:
| svn? Blast from the past! Why are you using it?
| throwaway823882 wrote:
| In general, for a very large old project that has no major
| problems with SVN, it's easiest to just leave it. Lots of
| open source projects are still on SVN (some even on CVS...)
| imoverclocked wrote:
| Any sccs users out there?
| FriedrichN wrote:
| I knew this one was coming. I've been using it for a very
| long time and it hasn't let me down. I have considered using
| git but found no compelling reason to migrate.
| russh wrote:
| Same here, I still use svn on my 20 year old projects and
| haven't felt the need change. I use git for my newer
| projects but occasionally run into issues that cause me to
| have to search for a solution.
| throwaway823882 wrote:
| Less-common one-liners that I use for work: # Use
| jq to craft json documents jq -en --rawfile key some_id_rsa
| \ '{ "ssh_private_key": $key, "hosts": [ {
| "type": "EC2", "name": "backenddev", "id": "i-0123456789",
| "address": "1.2.3.4", "region": "us-west-1" } ] }' >
| metadata.json # Use jq to import Terraform resources
| from a state file jq -er '.modules[].resources | to_entries
| | .[] | [ "terraform", "import", .key, .value.primary.id ] | @sh'
| \ generated/aws/route53/terraform.tfstate \ | xargs
| -L1 env # Use Bash to check for a TCP connection
| (like 'nc -z') timeout 1 bash -c 'cat < /dev/null >
| /dev/tcp/127.0.0.1/3306'
| [deleted]
| kaladin_1 wrote:
| ffmpeg -i <sth.mp4> <sth.mp3> ## converting videos to mp3
| susam wrote:
| I have something similar but a little more elaborate (not a
| one-liner) at my ~/bin to ensure that there isn't a severe loss
| of quality during the conversion:
| https://github.com/susam/dotfiles/blob/e434b7c/bin/xmp3
| rahimiali wrote:
| Some of these are useful. Some of these have better alternatives:
|
| > grep . *
|
| you can "cat *"
|
| > ps aux | convert label:@- process.png
|
| copy-pastable text is a better way to exchange text.
|
| > mkfifo hello; script -f hello
|
| you forget to mention that the other side needs to cat this file.
| but also, tmux might be better for this.
| matvore wrote:
| > > grep . * > you can "cat *"
|
| The advantage of `grep . *` is that it omits empty lines and
| includes the source file on each matching line by default.
| kown7 wrote:
| One can always dig their own IP address dig TXT
| -4 +short o-o.myaddr.l.google.com @ns1.google.com
| imoverclocked wrote:
| That's neat! I can also find my upstream DNS servers recursive
| resolver IP by leaving the @ns.google.com off. Looks like my
| upstream resolvers are using IPv6 :)
|
| Also, I can find the resolver IP for popular public resolvers
| this way too.
|
| This is probably the coolest thing I will learn about today.
| Crazyontap wrote:
| I sometimes wish there was a linux command that when piped into
| turned anything into json readable format, so `ps | json-pipe`
| would output something like [{pid: 133, name, etc}, ...] or `ls |
| json-pipe` would turn into [{name, size, etc}].
|
| It would handle most known commands and maybe had plugin support
| for the rest.
|
| Just a thought I had. Don't really know if it's possible or
| feasible. But it would make working with command line much more
| predictable and easier especially if it also supported jmespath!
| What do you guys think?
| bronson wrote:
| Nushell comprehensively addresses this: https://www.nushell.sh
|
| (I don't have an opinion yet. Been meaning to try it for a year
| now but a shell is a difficult thing to switch)
| daniellarusso wrote:
| I saw this mentioned a few weeks ago:
|
| https://stedolan.github.io/jq
|
| "Like sed for JSON data"
| drjasonharrison wrote:
| jq is a great tool for working with json data, but the author
| asked for a "command output in table format to json
| converter."
|
| The output would then be appropriate for jq.
| zaat wrote:
| Not a linux command, but PowerShell (on linux) have a
| ConvertTo-Json cmdlet, it can parse dotnet object, so 'Get-
| ChildItem | ConvertTo-Json' will give you the output you want,
| but it is less successful with text so 'ls -alh | ConvertTo-
| Json' will give you an array and not distinct objects.
| tornato7 wrote:
| I thought this was going to be about jokes :(
| nicbou wrote:
| Great post idea!
|
| "python3 -m http.server" is really useful when building simple
| JavaScript pages, or when you need a simple static file server
| for testing.
|
| "ss -p" is great, but if you just want to see what's hogging your
| bandwidth, iftop and nethogs are much better.
|
| My favourite one-liner is "open .", to open the current directory
| in Finder. The open command can also open URLs and other files.
|
| I also have an alias for "osascript -e 'display notification
| "'"$1"'"'", which will display the text you choose in a MacOS
| notification. It's useful when you need to be notified at the end
| of a long-running task. "printf '\a'" is also useful if you need
| the terminal to "ding".
| paxswill wrote:
| Not a one-liner by itself, but sticking pbcopy/pbpaste into a
| pipeline is great for quick text processing. Wish you had
| regency support in a text field? `pbpaste | sed
| s/needle/NEEDLE/g | pbcopy`
| punnerud wrote:
| I often like alert better (osascript -e 'display alert
| "'"$1"'"'"), this way the message don't go away before you
| click ok.
|
| Can also combine with a vocal message: sleep 2; osascript -e
| 'say "Hello World!"'; osascript -e 'display alert "hello
| world"'
|
| The last one copied from https://code-maven.com/display-
| notification-from-the-mac-com...
| nicbou wrote:
| I stopped using "say" because it made me jump in my chair too
| many times.
| swiley wrote:
| Most Linux based OSes will probably have busybox installed
| which includes its own web server. This can be nice if you
| don't have python (or if you think its overkill.)
| banana_giraffe wrote:
| For those that don't know "start ." is the Windows version of
| "open .", opening Explorer in the current folder.
|
| Speaking of Windows, "pushd \\\servername\sharename" is a
| simple way to mount a share in Windows, if you have the login
| creds cached, and set the new drive letter as your active
| drive. Useful if you need to bounce around a bunch of shares.
| samstave wrote:
| Also, "notepad FILENAME" will open the file in notepad...
| etc.
| manjana wrote:
| Also, "vim FILENAME", where Vim is an alias set in $PROFILE
| that point to the vim executeable.
| RealStickman_ wrote:
| Note that you don't have to specify an alias for it, if
| the vim executable is located in your $PATH.
| justinlilly wrote:
| The linux (ubuntu?) version of `open .` is `xdg-open .`
| [deleted]
| kergonath wrote:
| > I also have an alias for "osascript -e 'display notification
| "'"$1"'"'", which will display the text you choose in a MacOS
| notification
|
| This one is great. Very, very useful.
| jvinet wrote:
| I use something similar, but it leans on at(1) to popup
| reminders at predefined intervals. I tend to forget things
| once I'm buried in my Vim window.
|
| https://github.com/jvinet/dotfiles/blob/master/bin/rin
|
| Examples: $ rin +30 Check the turkey $
| rin '14:30 tomorrow' Watch baseball
|
| I currently have it setup so it pops up a modal dialog using
| Zenity. As well, it uses my cheap-and-cheerful bespoke
| notification doohickey that I have running in waybar, another
| script called notify:
| https://github.com/jvinet/dotfiles/blob/master/bin/notify
|
| This way, I have a nagging badge/icon in my waybar system
| tray until I finally do check that turkey and watch that
| baseball.
| Zutano wrote:
| If you use WSL, you can get the same functionality as "open ."
| with explorer.exe $(wslpath -w "$PWD")
|
| It's a bit lengthy so this is always aliased in my .bashrc when
| using WSL
| p410n3 wrote:
| explorer.exe . Has always worked for me from inside wsl
| maweki wrote:
| > My favourite one-liner is "open .", to open the current
| directory in Finder.
|
| For linux one can use `xdg-open .` to use the associated
| application. Works with pdf, image files, videos, etc.
|
| I have the alias x=xdg-open in my .bashrc, so that I use `x
| somefile` to open files.
| russh wrote:
| Thank you, thank you, thank you! "open ." is post-it note
| worthy.
| pletnes wrote:
| Also <<open somefile.txt>> can open, well, any file or
| directory, just as if you double clicked it. It works on
| multiple files, too. And possibly URLs, but I don't have a
| mac anymore to check.
| chrisshroba wrote:
| A slightly upgraded bash/zsh function for displaying a
| notification: noti() { osascript -e \
| 'on run argv display notification (item 1 of argv)
| with title "Notification" end run' \ $1
| } # Example: noti 'Hello world!'
|
| This fixes any escaping issues by passing the notification
| string to osascript as an argument instead of embedding it in
| the text of the program (which makes things like quotation
| marks not work correctly).
|
| Sticking it in your .bashrc or .zshrc will make it available at
| any time in your shell.
| susam wrote:
| > grep . *
|
| I believe this command is present to prefix each line of output
| with the filename. But this ignores all the blank lines. That can
| of course be fixed easily with: grep ^ *
|
| Here is what I normally use myself if I want to show the content
| of files with their filenames: tail -n +1 *
|
| This shows the name of the file once at the beginning of each
| file and no more. Here is an example: $ tail -n
| +1 * ==> bar.txt <== bar 1 bar 2 bar 3
| ==> baz.txt <== baz 1 baz 2 baz 3
| ==> foo.txt <== foo 1 foo 2 foo 3
| ansible wrote:
| Though you get error messages if there are any directories.
| This will filter those out: tail -n +1 `find
| * -maxdepth 0 -type f`
|
| Getting long enough to make an alias...
| tyingq wrote:
| One I used to use when website performance seemed bad. Prints out
| hits in the current log with a count for each unique client ip:
| awk '{print $1}' < apache.log | sort -n | uniq -c | sort -rn
| |less
|
| Produces output like: 4482 66.249.73.135
| 3264 46.105.14.53 3157 130.237.218.86 2073
| 75.97.9.59 1013 50.16.19.13 ...
|
| And fairly easy to throw in a "grep" for specific fetched urls,
| slices of time, etc.
| gmuslera wrote:
| I use cut instead of awk, at least for logs like apache or ones
| with fixed amount of spaces between fields, because it means
| less parsing/work, specially for summarizing long log files.
| Also use cat of the log as input, because is the same pattern
| for zcat/grep/zgrep if the input is compressed or I did some
| selection of records before.
|
| Some of the records you may have to search could have the port
| attached (i.e. output of netstat, haproxy logs or others) so
| for stripping them I add
|
| rev | cut -d ":" -f 2- | rev
|
| on the list of IPs to not get messed up with IPv6 records.
| chromejs10 wrote:
| Was really hoping for a list of jokes when I clicked that link. A
| bit disappointed.
| geocrasher wrote:
| A politician, a cleric, and a homeless guy walk into a bar, and
| the bartender says "What is this, some kind of joke?"
|
| You're welcome.
| defulmere wrote:
| My favorite is piping stuff into awk to make bar graphs. Here's
| system load from atopsar for the current day:
| atopsar -p | tail -n +7 | grep '\S' | awk '{printf("\n%s %6.2f
| ",$1, $5); for (i = 0; i<$5; i++) {printf("")}}'; echo
|
| sample:
| https://gist.github.com/defulmere/bec1aef40ca4cddb5c421ffa5f...
| defulmere wrote:
| Dangit, there should have been an ASCII block character in that
| second printf. Here's a version with an asterisk instead:
| atopsar -p | grep ":[0-9]\{2\}\s\+[0-9]" | awk '{printf("\n%s
| %6.2f ",$1, $5); for (i = 0; i<$5; i++) {printf("*")}}'; echo
| rhn_mk1 wrote:
| Fixed link:
| https://gist.github.com/defulmere/bec1aef40ca4cddb5c421ffa5f...
| defulmere wrote:
| gracias
| TheAceOfHearts wrote:
| On macOS you can read and write to the clipboard with pbcopy and
| pbpaste: $ ls | pbcopy $ pbpaste >
| out.txt
|
| You can also put this in a function in order to get the path of
| the frontmost Finder window: osascript
| 2>/dev/null -e ' tell application "Finder"
| return POSIX path of (target of window 1 as alias) end
| tell'
|
| Get the current Finder selection: osascript
| 2>/dev/null -e ' set output to "" tell
| application "Finder" to set the_selection to selection
| set item_count to count the_selection repeat with
| item_index from 1 to count the_selection if
| item_index is less than item_count then set the_delimiter to "\n"
| if item_index is item_count then set the_delimiter to ""
| set output to output & ((item item_index of the_selection as
| alias)\'s POSIX path) & the_delimiter end repeat'
| jgwil2 wrote:
| Also, for quick formatting a blob of JSON you've copied:
| pbpaste | json_pp | pbcopy
| michaelmcmillan wrote:
| On MacOS you can also drag-and-drop a file from Finder onto
| your terminal and it will type out the full path for you.
| TheAceOfHearts wrote:
| You can also select one or more files and use the hotkey
| Command + Option + C to "Copy N items as Pathname", which
| copies the full pathname of each item to your clipboard.
___________________________________________________________________
(page generated 2021-05-03 23:01 UTC)