Dlaczego pbpaste nie zwraca kursora na nową linię w bashu?

1

Uruchamiam polecenie pbpastew Terminalu (bash), aby uzyskać wynik mojego schowka, ale w przeciwieństwie do innych poleceń, które pozostawiają kursor w nowym wierszu poniżej poprzedniego stdout, pbpastepozostawia go po prawej stronie, jak w przykładzie, pokazując polecenie wciśnięty między dwa echo hellos:

hostname:~ jesse$ echo hello
hello
hostname:~ jesse$ pbpaste
https://itunes.apple.com/us/app/noizio/id928871589?mt=12hostname:~ jesse$ echo hello
hello
hostname:~ jesse$ 

Dlaczego tak jest? Wydaje się to bardzo dziwne i trudne do odczytania.

jsejcksn
źródło
Co dokładnie skopiowałeś?
Zaznacz
@Zaznacz Znaki w ciągu w linii 4 mojego kodu przed „nazwą hosta”
jsejcksn

Odpowiedzi:

6

pbpaste wkleja dokładnie to, co kopiujesz.

W twoim przypadku skopiowałeś linię nie zawierającą CR / LF na końcu. Aby uzyskać zwrot, musisz skopiować od początku linii do początku następnego wiersza

Od komentarza @patrix

Większość poleceń kończy się CR / LF. np. echo "Hello"wypisze nową linię, jednak dla echa można to zmienić echo -n "Hello".

Jeśli chcesz, możesz dodać nową linię po pbpaste, używając echo "$(pbpaste)"zamiast tego.

znak
źródło
Tak więc mówisz, że prawie wszystkie inne polecenia z wyjściem zawierają kończącą linię nowej linii?
jsejcksn
@JesseJackson Nie bezpośrednio. pbpastewyświetla cokolwiek znajduje się w schowku, który zwykle nie zawiera nowej linii. echo some textdomyślnie dodaje znak nowej linii, ale to jest coś, z czym można zapobiec echo -n some text. Jeśli chcesz zapewnić nową linię po pbpaste, użyj echo $(pbpaste)zamiast niej.
nohillside
@patrix Które inne polecenia domyślnie nie zawierają nowej linii? Nigdy nie widziałem tego zachowania w bashu przed użyciem polecenia pbpaste.
jsejcksn
@JesseJackson nie wiele, ale pbpaste kopiuje, co jest potrzebne do zastosowań, w których jest zastępowany w środku polecenia. Jak zauważyłem, wycinanie i wklejanie zwykle dla mnie przecina znak nowej linii podczas kopiowania na początek linii. Zobacz także pytania na python bez readline
Mark
@JesseJackson Różnica między poleceń przeznaczonych do produkcji niektórych tekst w Terminalu (jak echo, lsetc.) i poleceń przeznaczonych do powrotu tekstowych / danych skądś. Te pierwsze automatycznie dodają nową linię, później tylko zwracają (drukują) to, co dostały (co w przypadku schowka może być lub może być bez nowej linii).
nohillside
-1

Nie odpowiada to bezpośrednio na twoje pytanie dotyczące pbpaste, ale jestem użytkownikiem zsh (z oh-my-zsh ) i obsługuje scenariusz, który opisujesz, z wynikiem, który chcesz dla każdego wyjścia terminala.

  ~ echo -n hello
hello%                                                                          
  ~
  ~
  ~ /bin/bash
bash-3.2$ echo -n hello
hellobash-3.2$

Zdaję sobie sprawę, że wyciąga bazookę, by zabić komara , ale rozwiązuje twój prawdziwy problem, gdzie brak nowej linii na tym, co wkleiłeś, nie jest traktowany z wdziękiem.

wieloryb
źródło
Niezła informacja, nawet jeśli nie ma znaczenia.
jsejcksn