ack-grep, um in Ubuntu zu bestätigen


19

Ich habe mich nur gewundert, dass ich kürzlich ack (ack-grep in Ubuntu) installiert habe, und ich kann nicht herausfinden, wie man ack einfach eintippt, um ack-grep zu bekommen (aus irgendeinem Grund wird ack von einer Kanji-Übersetzungssache aufgegriffen).

Gibt es einen besseren Weg, als das Ding in der Shell zu aliasen (es ist nicht global und kann es zum Beispiel nicht vim evozieren)?

Vielen Dank!

Antworten:


16

Du verlinkst oder kopierst ack-grep, /usr/local/bindamit es im PATH prioritär wird:

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

Oder, wie von Davey vorgeschlagen, entfernen Sie es, ackwenn Sie es nicht brauchen:

sudo apt-get remove ack

Eine andere Lösung würde bedeuten , mit dpkg-divertsagen , dpkgdass Sie alle Pakete wollen ihre haben /usr/bin/acklokal umbenannt und verknüpfen Sie dann ack-grepauf ackin den Weg.


20

In Ubuntu / Debian können Sie "umleiten" ack-grep:

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

8

Verwenden Sie das 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

Der Befehl ist schwierig zu verstehen, aber die Lösung ist dpkg-divert aus folgenden Gründen überlegen:

  1. Erzwingt oder überschreibt die Paketinstallation nicht
  2. Aktiviert das Festlegen eines Slave-Links für die Manpage

Weitere Informationen zu Debian-Alternativen finden Sie hier: http://wiki.debian.org/DebianAlternatives

Wenn Sie die Alternative installieren, können Sie ack-grep as aufrufen ackund die Manpage mit lesen man ack.


1
Dies ist die beste Antwort, IMHO!
Renaud

Dies ist die "richtige" Debian / Ubuntu-Methode, um dies zu tun.
tgies

7

Am wenigsten aufdringlich:

alias ack = ack-grep


In der Frage wird nach etwas anderem als einem Alias ​​gefragt, wobei zu Recht darauf hingewiesen wird, dass diese Lösung nur in sehr begrenztem Umfang zur Verfügung steht und nicht dazu beitragen kann, sich von Vim- oder Bash-Skripten zu lösen.
Ian Greenleaf Young

@IanGreenleaf Wow, du hast Recht - peinlich, das 4 Jahre später zu sehen! Hoppla: /
am

7

Am einfachsten installieren Sie ack über cpan. Es wird in / usr / local / bin installiert, das Vorrang vor / usr / bin hat. Renn einfach:

sudo cpan App::Ack

oder wenn du den cpan client nicht hast:

curl -L cpanmin.us | perl - --sudo App::Ack

2
Funktionierte nicht für mich auf Ubuntu 10.04 LTS. Fehlermeldung: "Sei nicht albern, du kannst daniel bosold nicht installieren". Tut es sudo cpan -i App::Ackaber.
GeekQ

Bin ich der einzige, der denkt, dass dies nicht sicher ist?
SaveTheRbtz

2

Angenommen, der Kanji-Übersetzer ist noch nicht / usr / bin / ack und befindet sich später in Ihrem Pfad als / usr / bin, dann können Sie dies wahrscheinlich tun:

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

Dadurch werden Sie aufgefordert, den Vorgang zu bestätigen, wenn das Ziel vorhanden ist, und eine Sicherung zu erstellen, wenn Sie Ja auswählen.


2
Leider lebt die Kanji-Bestätigung in / usr / bin. Wenn Sie also ohne sie leben können: sudo apt-get remove ack
davey

0

Ich würde mit der Symlink-Option gehen, da es die Gefahr der Übertragung dieses Alias ​​auf einen anderen Computer erspart, wenn Sie Ihre Bash-Datei kopieren.

mach mit, funktioniert gut auf meinem Build von Ubuntu 12.04

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

0

Meine Lösung ist nicht so sauber, weil sie einschreibt, /bin/aber solange /usr/bin/ackes sich um eine Binärdatei und nicht um einen Symlink handelt, war es für mich einfacher, dies zu beheben.

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

So wählen Sie die zu verwendende Option aus

sudo update-alternatives --config ack
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.