Ich habe versucht, eine Ausgabe-URL in den Befehl einzuspeisen open
, habe aber mehrere Fälle gefunden, in denen ich trotz Änderung der Farbeinstellungen von grep oder Weiterleitung weiterer Ausgaben über andere Dienstprogramme wie awk
oder cut
immer noch Sonderzeichen in der Ausgabe erhielt. Wie unten gezeigt:
Wenn ich den Befehl die ersten beiden Male ausführe, open
werden mir jeweils diese beiden URLs gesendet:
Sie können sehen, dass die Sonderzeichen an die URLs angehängt werden, obwohl sie durch Cut geleitet werden oder die Farbeinstellungen geändert werden. Dies wird mit dem folgenden od
Befehl bestätigt:
➜ ~ apm show vim-mode | grep https | cut -d' ' -f2 | od -atx1
0000000 esc [ 4 m h t t p s : / / g i t h
1b 5b 34 6d 68 74 74 70 73 3a 2f 2f 67 69 74 68
0000020 u b . c o m / a t o m / v i m -
75 62 2e 63 6f 6d 2f 61 74 6f 6d 2f 76 69 6d 2d
0000040 m o d e esc [ 2 4 m nl
6d 6f 64 65 1b 5b 32 34 6d 0a
➜ ~ apm show vim-mode | grep --color=none https | cut -d' ' -f2 | od -atx1
0000000 esc [ 4 m h t t p s : / / g i t h
1b 5b 34 6d 68 74 74 70 73 3a 2f 2f 67 69 74 68
0000020 u b . c o m / a t o m / v i m -
75 62 2e 63 6f 6d 2f 61 74 6f 6d 2f 76 69 6d 2d
0000040 m o d e esc [ 2 4 m nl
6d 6f 64 65 1b 5b 32 34 6d 0a
0000052
Die nächsten beiden Ausgaben versuchen, awk
die URL zu entfernen, apm
führen jedoch auch Sonderzeichen ein und der open
Befehl versucht dann, sie als Dateien zu öffnen. Dies wird bestätigt mit od
:
➜ ~ apm show vim-mode | awk -F' ' '/http/ {print $2}' | od -atx1
0000000 esc [ 4 m h t t p s : / / g i t h
1b 5b 34 6d 68 74 74 70 73 3a 2f 2f 67 69 74 68
0000020 u b . c o m / a t o m / v i m -
75 62 2e 63 6f 6d 2f 61 74 6f 6d 2f 76 69 6d 2d
0000040 m o d e esc [ 2 4 m nl
6d 6f 64 65 1b 5b 32 34 6d 0a
Die Lösung war die Verwendung eines schönensed-Einzeiler, sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
das erfolgreich alle Sonderzeichen entfernt. Der letzte open
Befehl verwendet diesen Einzeiler und führt https://github.com/atom/vim-mode
wie erwartet zu aus. Dies wird bestätigt durch od
:
➜ ~ apm show vim-mode | awk -F' ' '/http/ {print $2}' | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | od -atx1
0000000 h t t p s : / / g i t h u b . c
68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63
0000020 o m / a t o m / v i m - m o d e
6f 6d 2f 61 74 6f 6d 2f 76 69 6d 2d 6d 6f 64 65
0000040 nl
0a
0000041
Es bleiben also einige Fragen offen:
- Warum
grep --color=none
funktioniert das nicht? - Warum fügen meine verschiedenen anderen Dienstprogramme Sonderzeichen hinzu?
Ich vermute, es hat etwas mit meinen Shell-Einstellungen zu tun. Ich verwendezimmit demgitsterThema
bearbeiten
Einstellung TERM=dumb
scheint keine Auswirkung zu haben:
➜ github-application master ✓ diff <(TERM=dumb apm show vim-mode | od -atx1) <(apm show vim-mode | od -atx1)
➜ github-application master ✓
Einstellung NPM_CONFIG_COLOR=false
scheint auch keine Auswirkung zu haben:
➜ ~/w/s/g/m/todo master ✓ diff <(NPM_CONFIG_COLOR=false apm show vim-mode | od -atx1) <(apm show vim-mode | od -atx1)
➜ ~/w/s/g/m/todo master ✓
Ich denke, es liegt an der Unterstreichung in der URL. Ich habe es weiter untersucht ineine andere Frage
Antwort1
Es scheint, dass die Sonderzeichen von eingefügt werden apm
.
➜ ~ apm show vim-mode | grep https | cut -d' ' -f2 | od -atx1
0000000 esc [ 4 m h t t p s : / / g i t h
1b 5b 34 6d 68 74 74 70 73 3a 2f 2f 67 69 74 68
0000020 u b . c o m / a t o m / v i m -
75 62 2e 63 6f 6d 2f 61 74 6f 6d 2f 76 69 6d 2d
0000040 m o d e esc [ 2 4 m nl
6d 6f 64 65 1b 5b 32 34 6d 0a
➜ ~ apm show vim-mode | grep --color=none https | cut -d' ' -f2 | od -atx1
0000000 esc [ 4 m h t t p s : / / g i t h
1b 5b 34 6d 68 74 74 70 73 3a 2f 2f 67 69 74 68
0000020 u b . c o m / a t o m / v i m -
75 62 2e 63 6f 6d 2f 61 74 6f 6d 2f 76 69 6d 2d
0000040 m o d e esc [ 2 4 m nl
6d 6f 64 65 1b 5b 32 34 6d 0a
0000052
➜ ~ apm show vim-mode | od -atx1
0000000 esc [ 3 6 m v i m - m o d e esc [ 3
1b 5b 33 36 6d 76 69 6d 2d 6d 6f 64 65 1b 5b 33
0000020 9 m nl � 94 9c � 94 80 � 94 80 sp esc [ 3
39 6d 0a e2 94 9c e2 94 80 e2 94 80 20 1b 5b 33
0000040 3 m 0 . 6 5 . 1 esc [ 3 9 m nl � 94
33 6d 30 2e 36 35 2e 31 1b 5b 33 39 6d 0a e2 94
0000060 9c � 94 80 � 94 80 sp esc [ 4 m h t t p
9c e2 94 80 e2 94 80 20 1b 5b 34 6d 68 74 74 70
0000100 s : / / g i t h u b . c o m / a
73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 61
0000120 t o m / v i m - m o d e esc [ 2 4
74 6f 6d 2f 76 69 6d 2d 6d 6f 64 65 1b 5b 32 34
0000140 m nl � 94 9c � 94 80 � 94 80 sp A d d sp
6d 0a e2 94 9c e2 94 80 e2 94 80 20 41 64 64 20
0000160 v i m sp m o d a l sp c o n t r o
76 69 6d 20 6d 6f 64 61 6c 20 63 6f 6e 74 72 6f
0000200 l nl � 94 9c � 94 80 � 94 80 sp 5 0 3 8
6c 0a e2 94 9c e2 94 80 e2 94 80 20 35 30 33 38
0000220 6 1 sp d o w n l o a d s nl � 94 94
36 31 20 64 6f 77 6e 6c 6f 61 64 73 0a e2 94 94
0000240 � 94 80 � 94 80 sp 1 0 1 4 sp s t a r
e2 94 80 e2 94 80 20 31 30 31 34 20 73 74 61 72
0000260 s nl nl R u n sp ` a p m sp i n s t
73 0a 0a 52 75 6e 20 60 61 70 6d 20 69 6e 73 74
0000300 a l l sp v i m - m o d e ` sp t o
61 6c 6c 20 76 69 6d 2d 6d 6f 64 65 60 20 74 6f
0000320 sp i n s t a l l sp t h i s sp p a
20 69 6e 73 74 61 6c 6c 20 74 68 69 73 20 70 61
0000340 c k a g e . nl nl
63 6b 61 67 65 2e 0a 0a
0000350
wobei e esc [ 2 4
es sich um die spezifischen Interessenslinien handelt.
Dies wird bestätigt, indem man zu Bash wechselt und das gleiche Ergebnis erhält:
bash-3.2# apm show vim-mode | grep https | cut -d' ' -f2 | od -atx1
0000000 esc [ 4 m h t t p s : / / g i t h
1b 5b 34 6d 68 74 74 70 73 3a 2f 2f 67 69 74 68
0000020 u b . c o m / a t o m / v i m -
75 62 2e 63 6f 6d 2f 61 74 6f 6d 2f 76 69 6d 2d
0000040 m o d e esc [ 2 4 m nl
6d 6f 64 65 1b 5b 32 34 6d 0a
Danke @muru für den Tipp!