* Learn your shell language -- really learn it. Learn how to fit programs together, how to manage jobs, and all of the control structures in your shell language. Avail yourself of aliases and shell functions.
* Learn the Unix command set, sed, and awk. Practice using these tools to do complex data or textual manipulation tasks.
* Make a personal ~/bin directory and add it to your $PATH. Put shell scripts that do useful things in there.
* Learn enough of a real programming language such as C or Python to write small programs to do common things that would be slow or cumbersome to do in shell. Put them in your ~/bin.
There, you'll be Unixing like a boss with a minimum of prompt ricing.
In terms of languages to learn, the most important is your shell, generally bash for most people. 99% of the time, bash is Fast Enough, even though it can often be very slow. Bash is incredibly ugly, but using its features and the userland tools that are standard on most Unices, you can do a lot of amazing things relatively easily.
For speedy programs, Perl can't be beat. For text manipulation, even C programs sometimes run slower than Perl and generally require more code and are much harder to maintain. Perl is nearly as ugly as Bash and has even more annoyances, but for raw text-processing throughput there's no competition.
For Linux, try terminator: http://gnometerminator.blogspot.co.uk/p/introduction.html , or your package manager. There are doubtless tons of other options.
The only feature that I find even remotely compelling is mouse support, but so few programs handle mouse input that it largely doesn't matter. People always mention split panes, but I've never had a desire to vertically split my terminal window. If I ever did have such a desire, I'd probably just use tmux. And yes, iTerm2 claims to have some form of tmux integration, but I believe that's basically just using iTerm2 split panes to represent tmux panes, and I don't get why that's any better than just using tmux directly.
So besides mouse support and split panes, what does iTerm2 offer that Terminal.app doesn't? Some of the answers I've heard in the past are "256 colors" and "color themes", both of which Terminal.app supports.
having timestamps in my prompts has helped me straighten out what I did to get myself into a situation across a few different windows of a tmux session.
having all nonzero return codes show up automatically because of tweaking my oh-my-zsh configuration has definitely saved me time here and there.
root on my machines looks completely different visually compared to my regular user account(s) and this has stopped me from doing dumb things as root, again, while bouncing around in a tmux session.
Plus shells that try to be too smart or do too much always break, leaving you debugging your shell. Shoot me now.
I would add 'grep' in there as an absolute must have.
The sed, grep, awk holy trinity will allow you to do pretty much any type of text manipulation and searching that you can imagine.
for f in *.mp3;
do id3v2 -T `rex 's/^[^0-9]*([0-9]+).*\.mp3$/\1/` $f;
done
The script itself is really simple, but I can post the source if anybody's interested.I confused myself much more than was necessary when I was first starting out, because I started using all of these tools like zshell/oh-my-zsh before I understood what was really going on, specifically with my $PATH. I seriously spent about a month floundering and becoming increasingly frustrated and confused before I finally sat down, read the docs, and learned why I should have been putting stuff in ~/.zshrc instead of ~/.bashrc as a result of using zshell. If you're still learning the ropes, customizations like this can be dangerous and time-consuming. Or, at least, you won't be able to just do whatever the intro docs tell you to do on GitHub and expect things to work. Those are hoops you don't want to jump through when you're first starting out.
For the more experienced hackers, this warning probably seems amateurish and unnecessary, but when I was starting I would have been particularly interested in "badassify-ing" my developer toolkit, not realizing what I was screwing up and how difficult I was making my future life.
Plus, if you spin up an image on EC2 or DigitalOcean, the default will be bash.
I never really customized bash, and fish has so good defaults that I don’t think I'll customize it much.
Web site: http://fishshell.com/
If you're typing a path (let's say to ~/Dropbox/Public/...) you can say "cd ~/d/p" and hit tab to fill in even the intermediate parts. Given that the only path that matches "~/d./p." is ~/Dropbox/Public/, zsh will fill that in. If it hits an ambiguity down the proverbial road, it'll expand until it hits the ambiguity and list potential matches.
It's really convenient knowing that I can say something like "cd ~/d/c/s/c" and it'll fill in the rest.
edit: I tried to indicate a basic regex pattern but I think HN is reading it as trying to italicize "/p." instead. I later tried escaping it with backslash, but no luck. Sorry if that's really confusing.
Seriously though, having aliases, scripts, or complex programs to help doesn't cripple you unless those things themselves force you into a state you are unable to reach out of.
I've never found myself on a new machine feeling helpless because I didn't have a shell with all the customizations I'm used to; I only felt some annoyance. Said annoyance was far less than the cumulative annoyance I felt before making those changes--and the amount they have saved me since.
There's no zsh or iTerm2, but it is much easier to read. I guess it would be possible to make something that downloads the binaries, sets them up temporarily and opens them.
Just learn how to use the terminal in its default form. We've been doing it for years efficiently.
Not all of us are system administrators who need to be able to work on any Unix system at any times notice, and can only rely on things like ed being installed on them (That's at least the complaint I've read a lot of from people who are against some customization, or learning some kind of non-standardized/ubiquitous program. But what if you get stranded in the Sahara with no laptop, and you have to use a AT&T UNIX PC because the bedouins don't have anything else, and you desperately need to fix something on some boxes 1,000 miles away? Where's your fancy colour schemes new?).
Edit: I do wholeheartedly agree with the revised parent comment. Piping things into your shell is bad practice because it allows malicious and non-malicious risks to your system. In the malicious case, an attacker can very easily serve up an innocent script to your browser and a malicious script to curl/wget. In the non-malicious case, a break in networking midway through the download can truncate commands, turning "rm -rf /opt/coolsoftware/build" into "rm -rf /opt".
twosheds still needs some work to get POSIX compliance, but it's already usable enough that I've replaced bash with my custom shell, Shell, which I've hacked to, among other things, print a ton on information on Git's status and the file system-- I never type git status or ls anymore. [2] If this sounds interesting, I encourage you to fork it and give it a try.
(1) Don't use words like "badassify" — they make you sound immature and reduce your credibility. (c.f. "rockstar engineer", "coding ninja", et cetera)
(2) Invest an afternoon in switching to a static site generator — your site's current server appears to be on fire due to excess traffic. As a member of the getpelican.com dev team, I'm clearly biased, but any static site generator will be better than an uncached Ghost instance.
(3) Try Fish :^) http://hackercodex.com/guide/install-fish-shell-mac-ubuntu/
'syntax-highlighting' \
to your .zpreztorc (below "zstyle ':prezto:load' pmodule \" line)and uncomment
zstyle ':prezto:module:syntax-highlighting' highlighters \
'main' \
'brackets' \
'pattern' \
'cursor' \
'root'I would be more tempted by adding a few things at a time, piece-wise. Plundering oh-my-zsh could be an approach: add some parts, see if they're useful, if they fit in your workflow, else ruthlessly discard them.
export CDPATH=.:$HOME:$HOME/workspace:$HOME/gocode/src/github.com/geetarista
You can set it to whatever you want, then just use `cd` and not worry about using some other script.
And then I wondered: what on earth are you doing in the command line if you don't want to "mess around with .bashrc"?
I guess the point is to turn the CLI into a mouse-less GUI?