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
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
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
...
Funktioniert nicht ganz mit leeren PATH-Komponenten, was "." Bedeutet. – Jens
@Jens Pflege um zu erarbeiten? Du meinst "." Sollte auf cwd erweitert werden? :-) – andlrc
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
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.
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:
<<<
wird nur von [ few ] Shells unterstützt.<<<
unterstützt wird.ist das nicht das gleiche wie in der Antwort von andlrc? – incBrain
@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
ah sry, ich habe diesen Unterschied nicht bemerkt. Und du hast auch einen schönen Job in der ** Notes ** Sektion gemacht)) – incBrain
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
Manche Leute mögen Dinge auf die harte Tour machen;) – sjsam
Warum würden Sie denken, 'grep' ist dafür geeignet? Es dient zum Drucken übereinstimmender Zeilen, nicht zum Neuformatieren von Daten. – Barmar