Estou em um Raspberry Pi 5 e tive que compilar a partir do código-fonte para obter a versão estável mais recente. O programa foi construído com sucesso e consigo executá-lo perfeitamente. No entanto, sempre que abro um novo terminal, tenho que executar o comando export PATH="$HOME/neovim/bin:$PATH"
antes de poder usar o programa normalmente. Como posso configurar meu terminal para executar automaticamente este comando ao abri-lo, sem precisar digitá-lo manualmente. Por favor, explique como se eu fosse um usuário completamente novo. Agradeço antecipadamente a ajuda.
's questions
Por que o link físico não corrompe se removermos o arquivo original? Se eu remover o arquivo original, o softlink ficará corrompido, mas o hard link não, então por que não corrompe
Por que lsattr
só funciona em arquivos? Quando tento usá-lo em um diretório, não funciona, exceto pelo conteúdo. Para arquivos, os atributos são mostrados corretamente, mas para diretórios, nada é exibido.
Por exemplo:
$ sudo lsattr ~/.pcb
$
Você pode me ajudar a entender as limitações desta ferramenta e seu uso adequado?
Menu e seus submenus em script bash de arquivo único com um menu de volta ao root para cada um.
Meu problema é que a show_root_menu
chamada às vezes apenas pula para o menu superior em vez da raiz.
Na maioria das vezes, dá errado com o submenu nvidia, para voltar ao menu raiz.
Em vez disso, ele vai para as "Opções do pacote" show_pckg_menu
, quando "mostrar menu raiz" é selecionado no submenu "Instalar driver gráfico proprietário":
Minhas outras questões relacionadas foram resolvidas até agora:
- Qual é a diferença entre "comando sh" e executar como executável?
- Criando e depurando um menu de script bash
$ shellcheck myscript No issues detected!
O roteiro real é:
#!/bin/bash
show_root_menu(){
width=72
height=50
menu_height=8
backtitle="Installer-menu"
title="Setup opions"
menu="Choose one of the following options:"
options=(1 'Add Mint PPA and update'
2 'Install Cinnamon '
3 'update and upgrade '
4 'Additional software installation '
5 'Upgrade Kernel '
6 'Resolve Ubuntu Cinnamon issues '
7 'Install graphic proprietary driver'
x reboot
q quit )
result=$(dialog --clear \
--backtitle "$backtitle" \
--title "$title" \
--menu "$menu" \
$height $width $menu_height \
"${options[@]}" \
2>&1 >/dev/tty)
}
show_pckg_menu(){
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='Package options'
menu='Choose one of the following options:'
options=(1 'Install package list'
2 'Export package list'
3 'update and upgrade'
4 'Show root menu'
x reboot
q quit )
result=$(dialog --clear \
--backtitle "$backtitle" \
--title "$title" \
--menu "$menu" \
$height $width $menu_height \
"${options[@]}" \
2>&1 >/dev/tty)
}
show_solver_menu(){
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='Resolver menu'
menu='Choose one of the following options:'
options=(1 'Network applet problem'
2 'Sound problem'
3 'update and upgrade'
4 'Show root menu'
x reboot
q quit )
result=$(dialog --clear \
--backtitle "$backtitle" \
--title "$title" \
--menu "$menu" \
$height $width $menu_height \
"${options[@]}" \
2>&1 >/dev/tty)
}
show_nvidia_menu(){
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='NVidia driver selection'
menu='Choose one of the following options:'
options=(1 'Install nvidia 515'
2 'Install nvidia 525'
3 'Update and upgrade'
4 'Show root menu'
x reboot
q quit )
result=$(dialog --clear \
--backtitle "$backtitle" \
--title "$title" \
--menu "$menu" \
$height $width $menu_height \
"${options[@]}" \
2>&1 >/dev/tty)
}
show_root_menu
case "$result" in
1) echo 'Mint backport repos installed';
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com A1715D88E1DF1F24 40976EAF437D05B5 3B4FE6ACC0B21F32 A6616109451BBBF2;
sh -c 'echo "deb http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
sh -c 'echo "deb-src http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
apt-key export 451BBBF2 | gpg --dearmour -o /etc/apt/trusted.gpg.d/mint.gpg;
apt update;
show_root_menu;;
2) echo 'Installation of Cinnamon';
apt install slick-greeter muffin cinnamon;
show_root_menu;;
3) echo 'Package upgrade';
apt update && apt upgrade -y;
show_root_menu;;
4) show_pckg_menu;;
5) sh ubuntu-mainline-kernel.sh;
show_root_menu;;
6) show_solver_menu;;
7) show_nvidia_menu;;
x) echo Reboot;
reboot;;
q) clear;
exit ;;
esac
show_pckg_menu
case "$result" in
1) echo 'Package Install';
sh installpkgs.sh;;
2) echo 'Manualy installed packages exported';
sh pkgsexport.sh;;
3) echo 'Package upgrade';
apt update && apt upgrade -y;
show_pckg_menu;;
4) show_root_menu;;
x) echo 'Reboot';
reboot;;
q) clear;
exit ;;
esac
show_solver_menu
case "$result" in
1) echo 'Applying changes to network settings';
clear;
option_picked "Option 1 Picked";
touch /etc/network/interfaces;
sh -c 'echo "auto lo" >> /etc/network/interfaces';
sh -c 'echo "iface lo inet loopback" >> /etc/network/interfaces';
sh -c 'echo " renderer: NetworkManager" >> /etc/netplan/*.yaml';
netplan apply;
show_solver_menu;;
2) echo 'Applying changes to sound settings';
ln -s /usr/share/pipewire /etc/pipewire;
touch /usr/share/pipewire/media-session.d/with-pulseaudio;
systemctl --user restart pipewire-session-manager;
systemctl --user start pulseaudio;
show_solver_menu;;
3) echo 'Package upgrade';
apt update && apt upgrade -y;
show_solver_menu;;
4) show_root_menu;;
x) echo 'Reboot';
reboot;;
q) clear;
exit ;;
esac
show_nvidia_menu
case "$result" in
1) echo 'NVidia driver 515 installation';
apt install nvidia-driver-515 -y;
show_nvidia_menu;;
2) echo 'NVidia driver 525 installation';
apt install nvidia-driver-525 -y;
show_nvidia_menu;;
3) echo 'Package upgrade';
apt update && apt upgrade -y;
show_nvidia_menu;;
4) show_root_menu;;
x) echo 'Reboot';
reboot;;
q) clear; exit ;;
esac
Usei um script sugerido por @Artem S. Tashkinov :" Escrevi isso para mim, mas roda no console. "
$sh raw_io.sh:
20: shopt: not found
raw_io.sh:
48: declare: not found
raw_io.sh:
61: Syntax error: redirection unexpected
Descobri que só precisava torná-lo executável e clicar duas vezes nele e, em seguida, "Executar no terminal":
Como é refrescante, não consigo copiar/colar a saída. Então, fiz uma captura de tela:
Como funciona com um clique duplo, mas preciso clicar em "Executar no terminal", também queria saber como iniciá-lo diretamente do terminal.
~/Desktop$ raw_io
raw_iso: command not found
Então, qual é a diferença entre essas formas de lançar isso?
No editor de texto nano, posso canalizar a seleção para um comando e, muitas vezes, preciso centralizar o texto, então criei o seguinte código
center() {
str=$1
# Strip leading and trailing whitespace from the string
str=$(echo "$str" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
str_len=${#str}
margin=$(((80 - str_len) / 2))
printf "%*s%s%*s\n" $margin "" "$str" $margin ""
}
Mas não sei muito sobre scripts, então gostaria de saber como posso melhorar esse código.
Por que você está vinculando a uma solução bash? Eu não uso esse shell, só quero que ele rode com sh
Como encadear comandos, ou seja, fazer a saída de um comando se tornar a entrada de outro?
basename | dirname /dev/null
Saída Esperada:
dev
Saída real:
usage: basename string [suffix]
basename [-a] [-s suffix] string [...]
/dev
Também tentei o seguinte, mas também não funcionou:
dirname /dev/null | basename
Como fazer com que o argumento da função/script Bash seja copiado completamente para a variável, pois '
(e algum outro caractere) não pode reter estar na variável?
por exemplo
m() {
v="$@"
echo "$v"
}
$ m let it be 'foo' bar
let it be foo bar
A ajuda sincera é apreciada, obrigado antes.
Como é que o Bash reinicia em um atalho, por exemplo, alt-0 em um vínculo não está funcionando
bind -x '"\e0":"reset"'
funciona (dá eco visível ao pressionar a tecla) apenas no primeiro início / tempo logo após a liberação da tela,
e continua sendo como pressionamento de tecla ecoado invisível
Alguma solução correta?
Eu sei que para lidar com espaços em nomes de arquivos você deve envolver todo o nome do arquivo entre aspas mas isso não está funcionando para este script, na verdade o que está acontecendo é exatamente o oposto, só funciona sem usar aspas e não entendo porque . Testado com gnome-terminal
.
echo "Drag and drop some file"
read FILE
NAME=$(basename "$FILE")
cp "$FILE" ~/foo/bar/"$NAME" && echo "Success!"
Eu tenho um terminal sem fio TD-LTE que pode ser usado como um adaptador de rede 4G externo. Ele está conectado ao computador através de USB. Quando estou usando o Debian 11, ele pode fornecer ethernet USB bem. No entanto, quando tentei usá-lo no Arch. Não consigo acessar a ethernet USB.
ip
não mostra o dispositivo externo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
link/ether f0:76:1c:08:1f:7b brd ff:ff:ff:ff:ff:ff
3: wlp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
link/ether 48:51:b7:f5:a5:be brd ff:ff:ff:ff:ff:ff
Talvez o Arch exija um firmware ou driver especial para o dispositivo. Como posso encontrá-lo?
lspci
não mostra o dispositivo externo
00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 0b)
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
00:16.0 Communication controller: Intel Corporation 8 Series HECI #0 (rev 04)
00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 1 (rev e4)
00:1c.1 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 2 (rev e4)
00:1c.2 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 3 (rev e4)
00:1d.0 USB controller: Intel Corporation 8 Series USB EHCI #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation 8 Series LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation 8 Series SATA Controller 1 [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 8 Series SMBus Controller (rev 04)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 10)
04:00.0 Network controller: Intel Corporation Wireless 7260 (rev bb)
No Arch, o dispositivo pode fornecer rede 4G bem. Eu posso me conectar à WLAN que ele fornece. Mais detalhes:
- SO: Linux 5.17.8-arch1-1
- computador: ThinkPad S3-S440
- Fornecedor do terminal TD-TLE: Huawei
Desativei o modo USB3.0.
Eu removi um pacote yum e instalei uma versão superior do mesmo pacote da fonte. Mas yum não vê isso. Sempre que tento instalar um pacote yum, ele tenta instalar o pacote yum mais antigo e não vê o pacote fonte que instalei.
Existe uma maneira de fazer o yum ver o pacote de origem? Tenha em mente que ainda não sei como criar rpms da fonte.
Estou usando métodos diferentes para diferentes programas para controlar seu gerenciamento de recursos. Quando eu usei systemd-run para gimp (programa de manipulação de imagem GNU), quando o requisito de memória da imagem é maior que o limite (ou seja, 300 MB que eu configurei), o programa travou e fechou. Existe algum método systemd-run que forneça usá-lo com segurança sem travar e limitar sua memória a um limite?
Eu usei o comando abaixo para iniciá-lo com systemd-run em seu atalho (ou seja, seu arquivo da área de trabalho):
systemd-run --scope -p MemoryLimit=300M gimp-2.8 %U
Estou tentando aprender cgroups-v2 e praticando. O documento cgroups-v2 afirmou que inserir pid é a única maneira de adicionar um programa ao cgroups-v2. Existe alguma outra maneira de adicionar executáveis de um programa ao cgroups-v2?
ou seja, em vez de fazer isso:
echo "34578" > /sys/fs/cgroup/Example/tasks/cgroup.procs
posso fazer isso para um arquivo executável como:
echo "/usr/bin/firefox/firefox > /sys/fs/cgroup/Example/tasks/cgroup.procs
Tenho que saber cada vez qual é o pid do programa para controlar seus recursos? ( Também descobri que a coisa semelhante pode ser feita pelo systemd-run na solução systemd-run, mas, desde que tentei aprender cgroups-v2, está fora de tópico ).
Atualmente estou trabalhando em um pequeno projeto; em um arquivo kml chamado weatherdata.kml, gostaria de extrair a pressão do nível do mar para cada <Placemark>
elemento. Estou tentando analisar as informações sobre a pressão do nível do mar e colocá-las em um arquivo chamado report.csv
; e imprima a pressão ao nível do mar em uma nova linha a cada vez.
Eu acho que isso funcionaria awk
e até agora eu tentei isso:
awk -F '[>,]' '/minSeaLevelPres/ {print $2}' report.csv
Mas quando executo este comando no shell, recebo isso:
1002</minSeaLevelPres
1002</minSeaLevelPres
1002</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1001</minSeaLevelPres
1002</minSeaLevelPres
1002</minSeaLevelPres
1003</minSeaLevelPres
quando eu quero pegar isso:
1002
1002
1002
1001
1001
1001
1001
1001
1001
1001
1001
1002
1002
1003
Não consigo descobrir como me livrar de </minSeaLevelPres
. Alguém saberia ajudar?
Abaixo está um exemplo de parte de um elemento de marcador emweatherdata.kml
<Placemark>
<styleUrl>#ex</styleUrl>
<lat>19.2</lat>
<lon>-24.1</lon>
<stormName>NINE</stormName>
<stormNum>10</stormNum>
<basin>AL</basin>
<stormType>LO</stormType>
<intensity>20</intensity>
<intensityMPH>23</intensityMPH>
<intensityKPH>37</intensityKPH>
<minSeaLevelPres>1002</minSeaLevelPres>
<atcfdtg>2020082350</atcfdtg>
<dtg>0000 UTC JAN 07</dtg>
</Placemark>
Eu quero instalar uma lista de pacotes de pkglist.txt
pelo menos no Manjaro e no Ubuntu, embora se houver uma maneira de instalar em todas as distros, seria melhor. Como posso fazer isso?
Já pensei em algo como:
# If on Manjaro:
yay -S --no-confirm --needed - < pkglist.txt
# Else if on Ubuntu:
xargs sudo apt install < pkglist.txt
O problema é que eu recebo um monte de Unable to locate package
erros. Eu poderia instalar os pacotes um por um do arquivo e ignorar os erros.
Eu tento usar a resolução de nomes e obter o endereço IP de um site. Eu usei o comando nslookup e usei a 6ª linha de sua saída. Porque notei que a saída do nslookup contém o endereço IP (no IPv4) na 6ª linha. Meu comando foi:
website=<somewebsiteURL>
IP=$(nslookup "$website" | head -n 6 | tail -n 1 | cut -d" " -f2)
Também tentei o comando sed para atingir o mesmo objetivo e usei:
website=<somewebsiteURL>
IP=$(nslookup "$website" | sed -n 6p | cut -d" " -f2)
o resultado foi o mesmo, o resultado não é confiável, às vezes funcionou, às vezes não.
Funciona corretamente, mas nem sempre. Às vezes, ele lê a 7ª linha, não a 6ª linha e falha.
Na verdade, resolvi meu problema usando outra abordagem:
website=<somewebsiteURL>
newIP=$(nslookup "$website" | grep "Address: " | head -n 1 | cut -d" " -f2)
que forneceu a linha e o endereço IP corretos todas as vezes (embora possa fornecer mais de um IP> nslookup pode retornar mais de um IP )
Por que os dois primeiros códigos falham?
Eu quero
- iniciar o comando ping
- obter apenas a primeira linha
- após a saída da primeira linha, termine o comando ping e coloque essa primeira linha em uma variável
Eu fiz :
firstline=$(ping -c 1 <site> > tmpfile | head -1)
mas ele completa o comando ping e grava no arquivo tmp e depois pega a primeira linha. Como posso encerrar o fluxo de saída do comando ping após a saída de sua primeira linha?