Znak procentu psuje Terminal

1

Po wpisaniu %znaku w terminalu łamie on tę powłokę i każdą nową powłokę otwieram do ponownego uruchomienia:

$ seq 10 | parallel -j50% "echo Hi {}"
-bash: printf: `"': invalid format character

Czy ktoś wie, dlaczego tak jest?

Aby rozszerzyć nieco więcej, jeśli otworzę terminal, a echo "100%"dzieje się tak:

Last login: Fri Nov 21 08:28:47 on ttys033
~$ echo "100%"
-bash: printf: `"': invalid format character

0; echo "100~$ 
-bash: printf: `"': invalid format character
7;file://mac-122667.dhcp.fnal.gov/Users/perdue~$ 
-bash: printf: `"': invalid format character
7;file://mac-122667.dhcp.fnal.gov/Users/perdue~$ 
-bash: printf: `"': invalid format character

Za każdym razem, gdy naciskam RETpo wprowadzeniu znaku procentu, Terminal miga i wyświetla komunikat o błędzie printf. Właściwie pracowałem nad tym więcej po opublikowaniu pytania, a jedną rzeczą, którą zrobiłem, było uaktualnienie bash:

~$ echo $BASH_VERSION 
4.3.30(1)-release

To pomaga. Wcześniej był to Bash 2. coś (o ile pamiętam - cokolwiek domyślnego Mountain Lion jest). W tej wersji Basha każde otwarte okno terminalu oprócz tego, w którym umieściłem, %było w porządku, ale każde nowe okno, które otworzyłem, było również uszkodzone i nic nie mogło przywrócić terminalu poza ponownym uruchomieniem.

Teraz, dzięki Bash 4.3, mogę wpisać polecenie, aby przywrócić monit do normy. Nowe okna terminali również są w porządku.

Ale - nadal nie mogę używać %poleceń, które wkładam do terminalu. Na szczęście nie muszę często, ale takie rzeczy awkpo prostu nie działają na moim komputerze Mac.

Więc moje $ PS1 to:

~$ echo $PS1
\[\e[0;34m\]\W\[\e[0;31m\]$ \[\e[0m\]

Jeśli na początku wygląda to na mylące, oto kolory, które ustawiam w moim profilu bash:

# colours for use in prompts
RED="\[\e[0;31m\]"
GREEN="\[\e[0;32m\]"
YELLOW="\[\e[0;33m\]"
BLUE="\[\e[0;34m\]"
PURPLE="\[\e[0;35m\]"
CYAN="\[\e[0;36m\]"
export PS1="${BLUE}\W${RED}\$ ${NOCOLOR}"

Jeśli mam echo "100%"inne konto użytkownika, jest w porządku! Tak wyraźnie, strzelam sobie gdzieś w stopę .bash_profile. Co jest niedobre, ponieważ w zasadzie lubię moją konfigurację, a przynajmniej tak mi się wydaje, ha!

Jeśli ktoś chce przejrzeć moje pliki kropek, jest teraz w GitHub . (Jestem trochę zawstydzony, żeby im to pokazać - jest tam trochę cruft, haha).

Gabriel Perdue
źródło
Masz na myśli, jeśli wpiszesz to w to polecenie? Co oznacza „przerwa”?
miken32,
Cześć, jeśli wpiszę %znak w dowolnym poleceniu, Terminal zwariuje. Powyższy przykład był właśnie najnowszy, więc to właśnie skopiowałem i wkleiłem. Ale też mnie uderza, gdy go używam awk.
Gabriel Perdue
Pomocne może być edytowanie i podanie dodatkowych szczegółów w pytaniu. Znowu, co dokładnie się dzieje? „Przerwy” i „szaleństwo” nie pomogą. Zrzut ekranu twojego terminala może pomóc, po wpisaniu bardzo prostej komendy, takiej jakecho "100%"
miken32,
Dobra, zredagowałem i dodałem kilka dodatkowych komentarzy ...
Gabriel Perdue
Co echo $PS1ci daje
miken32

Odpowiedzi:

2

Patrząc na .bash_profileto, wydaje się to najbardziej podejrzaną linią:

trap 'printf "${OPENTITLEBAR} `history 1 | cut -b8-` - `pwd` ${CLOSETITLEBAR}"' DEBUG

Ma wpływ printfna historię (która będzie zawierać twoją %postać).

Nie mam pojęcia, co to ma zrobić (zaktualizować tytuł okna za pomocą ostatniego polecenia?), Ale zgaduję, że jeśli to skomentujesz, błąd się zatrzyma.

beroe
źródło
Tak, to było to. Miałem ten zestaw, aby echo mojego ostatniego polecenia było wyświetlane na pasku tytułu u góry okna terminala, co było fajne, ale nie warte funkcjonalności. Dziękujemy wszystkim, którzy skomentowali! Chciałbym mieć wystarczającą liczbę przedstawicieli, aby odpowiednio głosować na wszystkich.
Gabriel Perdue
1

Analiza tego rodzaju problemów jest zawsze trudna. Zwykle tworzę nowe konto bez konfiguracji bash, aby zacząć od czystego konta (zakładając, że problem się tam nie pojawia), a następnie pracuję w górę, dodając plik konfiguracyjny według pliku konfiguracyjnego (lub wiersz po wierszu, jeśli to konieczne).

Oprócz zwykłych podejrzanych ( .bash_profile, .profilelub .bashrc) można również zajrzeć do .inputrc, /etc/profilea każdy plik pochodzą od jednego z nich.

nohillside
źródło
Masz rację - testowanie pustego konta nie wykazało żadnych problemów. Jestem teraz podejrzliwy w stosunku do jednej konkretnej linii w moim profilu bashu dzięki twoim komentarzom i mikenowi (jedyna linia z printf), ale nie jestem w dobrej pozycji, aby ją teraz przetestować ...
Gabriel Perdue