GNU/Linux >> Znalost Linux >  >> Linux

Proč se nové terminály v Awesome vytvářejí s Shlvl>1?

Mám PS1 který ukazuje SHLVL, pokud to není 1, abyste rychle zjistili, zda jsem v podskořápce. Při používání GNOME to funguje podle očekávání, ale když vytvořím nový terminál v Awesome WM (Mod4 +Návrat ) vždy začíná SHLVL=2 nebo vyšší. Je to normální?

To přímo souvisí s tím, kolikrát jsem restartoval Awesome (Mod4 +Ctrl +r nebo pkill -HUP awesome ). Existuje nějaký způsob, jak zabránit vytváření nových shellů při restartování?

Tyto commity se zdají být relevantní, protože Awesome nakonec spustí něco jako $SHELL -c ... na HUP , ale neznám dost C, abych to opravil.

Můj /bin/sh je dash a můj přihlašovací shell je bash .

Nahlásili problém.

Přijatá odpověď:

Myslím, že chápu proč, ale nemám úplnou opravu.

Chování SHLVL záleží na skořápce. V pomlčkách a ksh (pdksh i ksh93) se SHLVL zvyšují pouze interaktivní instance . V bash a zsh se všechny instance zvyšují o SHLVL , dokonce i bash -c … .

Pokud jste po této opravě zaznamenali změnu v chování, je pravděpodobné, že váš /bin/sh je pomlčka a váš $SHELL je bash. Dříve úžasné spouštělo /bin/sh -c … který nezměnil SHLVL . Po opravě se nyní spouští $SHELL -c … , tj. bash -c … , což zvyšuje SHLVL .

Můžete podvádět změnou SHLVL uvnitř Úžasné. Zahákněte do spouštěcího kódu, abyste snížili SHLVL o 1. Jsem si docela jistý, že je to možné bez rekompilace kódu C, i když kód Lua neznám.


Linux
  1. Vložit nové řádky s chybějícími hodnotami (ne)?

  2. Proč se mohu přihlásit pomocí částečných hesel?

  3. Proč Samba nepřidává nového uživatele pomocí „samba-tool“?

  1. Proč opustit kód 141 pomocí grep -q?

  2. echo text s novým řádkem v bash

  3. Proč spouštět příkaz prostředí Linux s '&'?

  1. Proč se držím xtermu

  2. Proč jsem si zamiloval Antergos Linux

  3. Proč není hlasování nahrazeno epollem?