Estou fisicamente conectado à máquina e uso Arch Linux. Uso Arabic no terminal e uso BiCon para adicionar suporte bidirecional para o terminal (estou usando st). Quero que o programa inicie automaticamente quando eu abrir o terminal e limpe a mensagem que ele exibe quando inicia, então fiz um script:
$ cat biconscript
bicon
clear
e coloquei em .bashrc e aqui está a saída, a linha bicon é executada repetidamente.
O que posso adicionar ao script bash para pará-lo após sua execução uma vez?
$ cat .bashrc
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
#alias ls='ls --color=auto'
alias ls='lsd'
alias grep='grep --color=auto'
alias p='sudo pacman'
alias ..='cd ..'
alias ...='cd ../../'
alias ....='cd ../../../'
alias ll='lsd -l -F'
alias la='lsd -aF '
alias sdn='sudo shutdown now'
alias q='exit'
alias update='p -Syu'
alias changeb='feh --bg-scale --randomize ~/Downloads/wall/'
export EDITOR=nvim #setting nvim as the default editor
export MANPAGER="nvim +Man!"
PS1='\[\e[38;5;232;107m\]>\[\e[48;5;252m\]>\[\e[48;5;251m\]>\[\e[0m\] \[\e[38;5;26;1m\]@\[\e[0m\] \[\e[1m\]\w\[\e[38;5;46m\]\$\[\e[0m\] '
set -o vi #set vim mode
shopt -s autocd #no need to type cd to change the directory
PROMPT_DIRTRIM=2
eval "$(zoxide init bash)" #adds the "z" command that is related to the zoxide app it works like the command "cd" but smarter
function yy() { # allows yazi to exist with changing the current directory
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")"
yazi "$@" --cwd-file="$tmp"
if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd"
fi
rm -f -- "$tmp"
}
biconscript #script to add arabic
Parece que
bicon
sempre inicia uma nova sessão de shell e então relê seu ,~/.bashrc
que então chamabicon
, que então relê seu~/.bashrc
, que então chamabicon
e chama e chama em um loop infinito. Isso é implícito pela página da ferramentaman
que declara:Então
bicon
bifurca um novo shell, que é o motivo pelo qual você vê isso acontecendo. Então você não pode adicionar essa ferramenta ao seu~/.bashrc
that simplesmente, eu temo. No entanto, você pode envolvê-la em um simplesif
que primeiro verifica se umabicon
instância está em execução e só inicia se não houver nenhuma:É importante ter o
clear
lado de foraif
porque precisamos que ele seja executado pelo shell gerado, então somente sebicon
estiver em execução. Agora, isso funciona, mas significa que você só tem embicon
execução no primeiro terminal que você abre e até fechar aquele. Então, se você abrir um novo enquanto o antigo ainda estiver em execução, você não entrarábicon
no novo.Para contornar isso, se você estiver usando
bash
, você pode aproveitar aSHLVL
variável. Vejaman bash
:Esta variável conta o número de instâncias bash que você iniciou na sessão atual. Em sistemas gráficos, isso provavelmente ocorrerá
2
quando você abrir um terminal, presumivelmente porque seu ambiente de desktop já está em execução em uma instância bash:Se você abrir um novo shell como um usuário diferente, deverá ser
1
:Então, supondo que seu sistema seja como o meu e você tenha
2
novos terminais, você pode adicionar isto ao seu~/.bashrc
:Isso só será iniciado
bicon
uma vez por terminal aberto.Teste no seu sistema, verifique se em um novo terminal seu valor
SHLVL
é 1 ou 2 e adapte adequadamente (talvez você queira usar-le 1
instead of-le 2
se seu valor for 1).