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!

raphink
  • 11,987
  • 6
  • 37
  • 48
FurtiveFelon
  • 357
  • 4
  • 12

8 Answers8

20

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

sudo dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep
SaveTheRbtz
  • 5,691
  • 4
  • 32
  • 45
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.

raphink
  • 11,987
  • 6
  • 37
  • 48
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.

sean
  • 81
  • 1
  • 1
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
Naveed
  • 171
  • 1
  • 3
7

Least obtrusive:

alias ack=ack-grep

broady
  • 179
  • 1
  • 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. – Ian Greenleaf Young Dec 29 '14 at 21:33
  • @IanGreenleaf wow, you're right - embarrassing to see that 4 years later! Oops :/ – broady Jan 12 '15 at 06:02
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.

Dennis Williamson
  • 62,149
  • 16
  • 116
  • 151
  • 2
    Unfortunately the kanji ack lives in /usr/bin so if you can live without it: sudo apt-get remove ack – gm3dmo Dec 25 '09 at 08: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
Guillermo
  • 101
  • 1