2016-06-04 20 views
2

Wie kann ich alle Pfade von $ PATH so anzeigen?

Ich bin sehr neu, also habe ich keine Ahnung, was ich mit grep machen soll und wie ich es so anzeigen kann. Thx im Voraus

+0

Warum würden Sie denken, 'grep' ist dafür geeignet? Es dient zum Drucken übereinstimmender Zeilen, nicht zum Neuformatieren von Daten. – Barmar

Antwort

4

Ich bin nicht ganz sicher, warum Sie das wollen? tr kann Charakter übersetzen:

tr ':' $'\n' <<< "$PATH" 

tr wird SET1 (:) zu SET2 (Zeilenumbrüche)

Alternative übersetzen Sie AWK verwenden kann es ein wenig schöner zu formatieren:

% awk 'BEGIN{RS=":"}{printf "Path %d: %s\n", NR, $0}' <<< "$PATH" 
Path 1: /usr/bin 
Path 2: /bin 
... 
+0

Funktioniert nicht ganz mit leeren PATH-Komponenten, was "." Bedeutet. – Jens

+0

@Jens Pflege um zu erarbeiten? Du meinst "." Sollte auf cwd erweitert werden? :-) – andlrc

+0

Die Shell behandelt leere PATH-Komponenten in ':/bin','/bin: 'oder'/usr/bin ::/bin', als wären sie '.'. Es war für immer so und ist wahrscheinlich in deinem Shell-Handbuch dokumentiert (es ist in meiner sh (1) man-Seite auf FreeBSD). Allgemeine Weisheit von heute ist, dass es ein schlechtes Feature ist (genauso wie "." Irgendwo) und sollte nicht wegen der Sicherheitsimplikationen verwendet werden. – Jens

2

In einer Schale Skript, das Sie tun könnten:

#!/bin/bash 

IFS=':' read -ra ITEMS <<< "$PATH" 
for i in "${ITEMS[@]}"; do 
    echo "$i" 
done 

Dadurch wird jede einzelne PATH-Einstellung in der Liste in einer separaten Zeile ausgegeben.

Wenn Sie etwas anderes damit tun wollen, ändern Sie einfach die Befehle innerhalb der for Schleife.

1

Kleine awkish Lösung:

awk 'BEGIN{RS=":"}{printf "Path %d: %s\n",++i,$0}' <<<"$PATH" 

Ausgabe

Path 1: /home/ssam/bin 
Path 2: /usr/local/sbin 
Path 3: /usr/local/bin 
Path 4: /usr/sbin 
Path 5: /usr/bin 
Path 6: /sbin 
Path 7: /bin 
Path 8: /usr/games 
Path 9: /usr/local/games 
Path 10: /dingo/mingo 

Hinweise:

  1. Herestrings oder <<< wird nur von [ few ] Shells unterstützt.
  2. Meine GNU Bash-Version ist 4.3.11, wo <<< unterstützt wird.
+0

ist das nicht das gleiche wie in der Antwort von andlrc? – incBrain

+0

@incBrain: Nun mein Fehler Kumpel :(, ich sah nie die awk Teil die andere Antwort.Es gibt auch einen Unterschied, ich benutze einen Zähler "i", wo der andere eine Nummer "NR" verwendet. – sjsam

+0

ah sry, ich habe diesen Unterschied nicht bemerkt. Und du hast auch einen schönen Job in der ** Notes ** Sektion gemacht)) – incBrain

1

Sie awk wie diese verwenden können,

$ awk -F\: '{ 
    for (i = 0; ++i <= NF;) 
    print "Path", i,":", $i 
    }' <<<$PATH 
Path 1 : /usr/local/sbin 
Path 2 : /usr/local/bin 
Path 3 : /usr/sbin 
Path 4 : /usr/bin 
Path 5 : /sbin 
Path 6 : /bin 
Path 7 : /usr/games 
Path 8 : /usr/local/games 
Path 9 : /snap/bin 

Wenn Sie Sie so versuchen können, verwenden PYTHON wollen,

$ python -c "import os; print '\n'.join(os.environ['PATH'].split(':'))" 
/usr/local/sbin 
/usr/local/bin 
/usr/sbin 
/usr/bin 
/sbin 
/bin 
/usr/games 
/usr/local/games 
/snap/bin 
+1

Manche Leute mögen Dinge auf die harte Tour machen;) – sjsam