commandlinefu.com is the place to record those command-line gems that you return to again and again.
Delete that bloated snippets file you've been using and share your personal repository with the world. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.
If you have a new feature suggestion or find a bug, please get in touch via http://commandlinefu.uservoice.com/
You can sign-in using OpenID credentials, or register a traditional username and password.
First-time OpenID users will be automatically assigned a username which can be changed after signing in.
Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.
» http://twitter.com/commandlinefu
» http://twitter.com/commandlinefu3
» http://twitter.com/commandlinefu10
Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):
Subscribe to the feed for:
There is 1 alternative - vote for the best!
A similar version for Bash that doesn't require cut and shortens the function in a few places. And it uses local variables. (similar to a version by eightmillion in a comment on the another version)
If you can do better, submit your command here.
You must be signed in to comment.
awesome
? If a take a real ruler, that doesn't match the result of the shell output...
This is a little shorter, but it doesn't work on zsh:
ruler(){ for s in '....^....|' '1234567890';do unset str;while [ ${#str} -lt $COLUMNS ];do str=$str$s;done;echo ${str:0:$COLUMNS};done;}I think this method is kind of interesting too:
ruler(){ for s in '....^....|' '1234567890';do str=$(printf "%$((COLUMNS))s"|sed 's/./'$s'/g');echo ${str:0:$COLUMNS};done;}This is a fun command to play around with. Thanks for submitting it. This version numbers the fields like a ruler:
ruler(){ local c;for s in '...^^^...|' '1234567890';do unset str;while [ ${#str} -lt $COLUMNS ];do str=${str/^^^/$(printf "%.3d" $c)}$s;c=$[c+1];done;echo ${str:0:$COLUMNS};done;}Thanks, eightmillion. I was trying to figure out a way to number the ruler. I wrote a version of this in perl that will do just that.
The perl version actually puts the tens digit where the pipe symbol goes:
....^....1....^....2....^....3123456789012345678901234567890
I figure that anyone can figure out which hundred they're in, so having the marks accurate to the 10s digit is sufficient... I can grab that by dividing and modding the number by 10. I'll play around with that this weekend.
Sputnick -- the idea here is not to create a ruler to measure in inches or centimeters, but rather to measure by characters on the screen. Handy when you're trying to figure out where the start and end positions are for 'cut' for example. FWIW, I believe that there are a couple of generators out there for PostScript rulers and PostScript graph paper. As long as you print these out on a printer which does not scale the image, you will come out with something that you can use to measure in inches or cm.
irg. got the code tags wrong on the ruler. That should have looked like this:
....^....1....^....2....^....3
123456789012345678901234567890
sigh.
....^....1....^....2....^....3123456789012345678901234567890@eightmillion: for zsh, change the echo to:
echo ${str[1,$COLUMNS]}@eightmillion: your field numbering version sometimes misses the last one. Adding ten to the number of columns in the while statement fixes that. Here's one way to do it:
while (( ${#str} < $COLUMNS + 10 ))@bartonski: Here's a version of eightmillion's version that does what your Perl version does:
ruler(){ local c;for s in '....^....|' '1234567890';do unset str;while (( ${#str} < $COLUMNS + 10 ));do str=${str/|/$(printf "%d" $c)}$s;((c=(c+1)%10));done;echo ${str:0:$COLUMNS};done;}@eightmillion: You're right, it is fun.