19

I was just wondering, i recently installed ack (ack-grep in ubuntu), and i can't figure out how to just type in ack to get ack-grep (for some reason ack is taken up by a kanji translator thing).

Is there a better way than just aliasing the thing in the shell (it is not global that way, and cannot evoke it in vim for example).

Thanks a lot!

8 Answers 8

16

You link or copy ack-grep to /usr/local/bin so that it gets prioritary in the PATH:

sudo ln -sf /usr/bin/ack-grep /usr/local/bin/ack

Or, like davey suggested, get rid of ack if you don't need it:

sudo apt-get remove ack

Another solution would involve using dpkg-divert to tell dpkg that you want all packages to have their /usr/bin/ack renamed locally and then link ack-grep to ack in the path.

20

In Ubuntu/Debian you can "divert" ack-grep:

sudo dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep
8

Use the Debian Alternatives system.

$ update-alternatives --install /usr/bin/ack ack /usr/bin/ack-grep 100 \
--slave /usr/share/man/man1/ack.1p.gz ack.1p.gz /usr/share/man/man1/ack-grep.1p.gz

The command is tricky to get right, but the solution is superior to dpkg-divert for the following reasons:

  1. Does not force or override package installation
  2. Enables setting a slave link for the manpage

More info on Debian Alternatives here: http://wiki.debian.org/DebianAlternatives

Installing the alternative enables invoking ack-grep as ack and reading the manpage using man ack.

2
  • 1
    This is the best answer IMHO!
    – Renaud
    May 6, 2014 at 22:27
  • This is the "right" Debian/Ubuntu way to do this.
    – tgies
    May 7, 2014 at 13:54
7

Least obtrusive:

alias ack=ack-grep

2
  • The question asks for something other than alias, correctly noting that this solution is pretty limited and can't help with shelling out from Vim or bash scripts. Dec 29, 2014 at 21:33
  • @IanGreenleaf wow, you're right - embarrassing to see that 4 years later! Oops :/
    – broady
    Jan 12, 2015 at 6:02
7

The easiest thing to do is install ack via cpan. It will get installed in /usr/local/bin, which has precedence over /usr/bin. Just run:

sudo cpan App::Ack

or if you don't have the cpan client:

curl -L cpanmin.us | perl - --sudo App::Ack
2
  • 2
    Didn't work for me on Ubuntu 10.04 LTS. Error message: "Don't be silly, you can't install daniel bosold". But sudo cpan -i App::Ack does.
    – geekQ
    Oct 10, 2011 at 8:48
  • Am I the only one who thinks this is not secure? Apr 22, 2013 at 21:56
2

Assuming that the kanji translator is not already /usr/bin/ack and that its location is later in your path than /usr/bin, then you can probably do this:

sudo ln -sib /usr/bin/ack-grep /usr/bin/ack

This will prompt you to confirm the operation if the destination exists and creates a backup if you select yes.

1
  • 2
    Unfortunately the kanji ack lives in /usr/bin so if you can live without it: sudo apt-get remove ack
    – gm3dmo
    Dec 25, 2009 at 8:23
0

i'd go with the symlink option as it saves the danger of transferring that alias to another machine if you copy your bash file.

go with this, works fine on my build of ubuntu 12.04

sudo apt-get install ack-grep
sudo ln -sf /usr/bin/ack-grep /usr/local/bin/ack
0

My solution is not so clean because it write in /bin/ but as long as /usr/bin/ack is a binary and not a symlink, was easier for me to fix this way.

sudo update-alternatives --install /bin/ack ack /usr/bin/ack 100
sudo update-alternatives --install /bin/ack ack /usr/bin/ack-grep 102

To choose which one to use

sudo update-alternatives --config ack

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .