Znak procentu (%) przed poleceniem powłoki

9

Właśnie wkleiłem trochę kodu do mojej powłoki, ale zapomniałem usunąć wiodące %przed uruchomieniem polecenia. Wygląda na to, że nic nie zrobił. Dlaczego to nic nie robi w mojej powłoce ( zsh )?

> % echo foo

W bash dostaję następujące

> % echo foo
bash: fg: %: no such job

Chcę tylko mieć pewność, że uruchomienie mojego polecenia nie wywołało żadnych skutków ubocznych.

Dave
źródło

Odpowiedzi:

9

%odnosi się do „jobid”, który jest używany jako część funkcji „kontroli zadań i kontroli procesu” programu zsh. Cytat z instrukcji obsługi:

'fg' is the default operation on jobs referred to with the '%' notation,
so just typing '%1' with no command name would have worked, too.

Przykład:

$> man zshall &
[1]  + 31392 suspended (tty output)  man zshall
$> jobs
[1]  + suspended (tty output)  man zshall
$> %
<manpage-opens-for-zshall>

Przeczytaj więcej na ten temat tutaj: http://zsh.sourceforge.net/Guide/zshguide03.html#l39

Aby odpowiedzieć na twoje prawdziwe pytanie: Jeśli twój zsh nie wyświetla ostrzeżenia („fg: no current job” itp.), Oznacza to, że IS / WAS było zadanie. Przykład:

$> sleep 60 &
$> % echo foo
[1]  + 411 running    sleep 60
fg: job not found: echo

%Właśnie wróciłam proces w tle i uruchamia go. Po 60 sekundach otrzymano następny „jobid”, którego nie znaleziono.

Zatem: Zachowanie, którego doświadczyłeś, jest nieco dziwne. Bez pełnego zshrc trudno jest powiedzieć, co dokładnie się dzieje. Wygląda na to, że udało ci się powiedzieć swojemu zsh, że znak '%' rozpoczyna komentarz. Sprawdziłbym histcharsparametr pod kątem jego trzeciej wartości:

$> echo $histchars
akira
źródło
Świetnie, dzięki. Udało mi się zreplikować twoje testy i wyznaczyć działające zadanie %. Dobry $histcharsteż, ale mój to znak skrótu ( !^#). Zgaduję, że odpowiedzią na mój konkretny przypadek jest to, że niektóre procesy działające w tle działały dziwnie w Zsh. Jeszcze raz dziękuję za lekcję powłoki!
Dave