AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / 问题

All perguntas(unix)

Martin Hope
user648855
Asked: 2025-02-02 03:39:03 +0800 CST

Como posso extrair strings entre aspas dentro de uma variável?

  • 11

Reconheço que há perguntas superficialmente semelhantes feitas aqui antes, mas todas as que vi são mais simples do que o que estou tentando alcançar. Soluções somente Bash são preferidas.

Tenho uma variável contendo uma string que parece uma comparação de algum tipo, e gostaria de dividi-la em um array. A seguir estão alguns exemplos, incluindo como gostaria que fossem divididos:

var='name="value"'                # arr=([0]=name [1]='=' [2]=value)
var="name != '!value='"           # arr=([0]=name [1]='!=' [2]='!value=')
var='"na=me" = value'             # arr=([0]=na=me [1]='=' [2]=value)
var='name >= value'               # arr=([0]=name [1]='>=' [2]=value)
var='name'                        # arr=([0]=name)
var='name = "escaped \"quotes\""' # arr=([0]=name [1]='=' [2]=escaped\ \"quotes\")
var="name = \"nested 'quotes'\""  # arr=([0]=name [1]='=' [2]=nested\ \'quotes\')
var="name = 'nested \"quotes\"'"  # arr=([0]=name [1]='=' [2]=nested\ \"quotes\")

Você entendeu. Qualquer um dos lados (ou nenhum) pode ser citado, com aspas simples ou duplas. Pode haver aspas de escape ou aninhadas. O operador entre elas pode ser qualquer um de um conjunto predefinido, mas também pode ser incluído dentro das strings citadas. Pode haver ou não espaços. Pode não haver operador algum.

Tenho que analisar muitas linhas e, portanto, prefiro não bifurcar um novo processo a cada vez, e é por isso que soluções somente Bash são preferidas. Esta é uma adição a um script Bash existente que não precisa ser portátil para outros shells e está sendo executado no Bash 5.2, então tenho acesso a recursos Bash modernos que podem ser úteis.

IFS=\" read -a arr <<<"$var"é legal porque entende como lidar com aspas de escape, e se eu tivesse que lidar apenas com aspas simples ou duplas e não ambas , eu poderia fazer isso funcionar. Do jeito que está, só espero não ter que escrever um algoritmo tokenizador inteiro em script de shell, e que haja alguma combinação de recursos que eu não tenha considerado que possa analisar isso de forma confiável.

bash
  • 2 respostas
  • 499 Views
Martin Hope
Jeremy
Asked: 2025-01-23 04:01:29 +0800 CST

Alterando todos os strcpy para strscpy

  • 11

Estou aprendendo sobre desenvolvimento do kernel Linux. Eu clonei para o branch estável do Linux. Eu assisti a um tutorial de Greg KH no youtube que explica que você pode usar o script checkpatch.pl para encontrar código insatisfatório de acordo com os padrões atuais. Eu sou apenas um iniciante e então não tenho nenhum arquivo em mente para testar. Eu decidi testar aquele que inicia tudo: main.c em init/:

./scripts/checkpatch.pl --file --terse init/main.c

A saída foi uma longa lista de diferentes coisas erradas com o arquivo main.c:

homie@vmi2410184:~/git/kernels/staging$ ./scripts/checkpatch.pl --file --terse init/main.c
Traceback (most recent call last):
  File "/home/homie/git/kernels/staging/scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
init/main.c:3: WARNING: It's generally not useful to have the filename in the file
init/main.c:107: WARNING: Use #include <linux/io.h> instead of <asm/io.h>
init/main.c:110: WARNING: Use #include <linux/cacheflush.h> instead of <asm/cacheflush.h>
init/main.c:203: WARNING: Missing a blank line after declarations
init/main.c:208: WARNING: Block comments use a trailing */ on a separate line
init/main.c:401: WARNING: braces {} are not necessary for single statement blocks
init/main.c:469: WARNING: void function return statements are not generally useful
init/main.c:567: WARNING: Missing a blank line after declarations
init/main.c:579: WARNING: Missing a blank line after declarations
init/main.c:659: WARNING: Prefer strscpy over strcpy - see: https://github.com/KSPP/linux/issues/88
init/main.c:660: WARNING: Prefer strscpy over strcpy - see: https://github.com/KSPP/linux/issues/88
init/main.c:662: WARNING: Prefer strscpy over strcpy - see: https://github.com/KSPP/linux/issues/88
init/main.c:663: WARNING: Prefer strscpy over strcpy - see: https://github.com/KSPP/linux/issues/88
init/main.c:675: WARNING: Prefer strscpy over strcpy - see: https://github.com/KSPP/linux/issues/88
init/main.c:677: WARNING: Prefer strscpy over strcpy - see: https://github.com/KSPP/linux/issues/88
init/main.c:681: WARNING: Prefer strscpy over strcpy - see: https://github.com/KSPP/linux/issues/88
init/main.c:683: WARNING: Prefer strscpy over strcpy - see: https://github.com/KSPP/linux/issues/88
init/main.c:1158: WARNING: Prefer strscpy over strcpy - see: https://github.com/KSPP/linux/issues/88
init/main.c:1196: WARNING: Prefer using '"%s...", __func__' to using 'initcall_blacklist', this function's name, in a string
init/main.c:1212: WARNING: Prefer [subsystem eg: netdev]_dbg([subsystem]dev, ... then dev_dbg(dev, ... then pr_debug(...  to printk(KERN_DEBUG ...
init/main.c:1222: WARNING: Prefer [subsystem eg: netdev]_dbg([subsystem]dev, ... then dev_dbg(dev, ... then pr_debug(...  to printk(KERN_DEBUG ...
init/main.c:1299: ERROR: Use of const init definition must use __initconst
init/main.c:1339: WARNING: Possible unnecessary 'out of memory' message
init/main.c:1343: WARNING: Prefer strscpy over strcpy - see: https://github.com/KSPP/linux/issues/88
init/main.c:1529: WARNING: quoted string split across lines
total: 1 errors, 24 warnings, 1603 lines checked

Essa pode ser uma pergunta idiota. Por que isso não foi corrigido?

Um em particular que seria fácil de mudar é mudar todo strcpy para strscpy. Tenha em mente que strscpy leva um argumento a mais que strcpy.

linux
  • 1 respostas
  • 1225 Views
Martin Hope
Bomber King
Asked: 2025-01-20 05:57:48 +0800 CST

a raiz do sistema de arquivos tem apenas 500 MB

  • 11

Estou no Debian 12 e hoje enquanto estava instalando o Davinci Resolve aconteceu que a seguinte notificação apareceu

a raiz do sistema de arquivos tem apenas 500 MB

embora eu tenha cerca de 400 GB, na verdade não entendo como o Linux usa esse espaço e agora sinto que meu computador pode estar em perigo e temo não conseguir instalar algo no futuro

Alguém poderia me dizer como gerenciar meu uso de espaço? Usei o comando current para ter certeza de que entendi bem as coisas.

$ sudo lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0         7:0    0     4K  1 loop /snap/bare/5
loop1         7:1    0   104M  1 loop /snap/core/16928
loop2         7:2    0  73.9M  1 loop /snap/core22/1722
loop3         7:3    0  73.9M  1 loop /snap/core22/1663
loop4         7:4    0  66.2M  1 loop /snap/core24/490
loop5         7:5    0 104.2M  1 loop /snap/core/17200
loop6         7:6    0  66.2M  1 loop /snap/core24/609
loop7         7:7    0  91.7M  1 loop /snap/gtk-common-themes/1535
loop8         7:8    0 448.6M  1 loop /snap/telegram-desktop/6470
loop9         7:9    0  44.4M  1 loop /snap/snapd/23545
loop10        7:10   0 448.6M  1 loop /snap/telegram-desktop/6474
loop11        7:11   0  44.3M  1 loop /snap/snapd/23258
nvme0n1     259:0    0 476.9G  0 disk 
├─nvme0n1p1 259:1    0   512M  0 part /boot/efi
├─nvme0n1p2 259:2    0  27.9G  0 part /
├─nvme0n1p3 259:3    0   7.5G  0 part [SWAP]
└─nvme0n1p4 259:4    0   441G  0 part /home

embora eu realmente não entenda nada dessa saída

atualização: saída de

df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            3.8G     0  3.8G   0% /dev
tmpfs           769M  2.3M  766M   1% /run
/dev/nvme0n1p2   28G   26G  308M  99% /
tmpfs           3.8G  1.1M  3.8G   1% /dev/shm
tmpfs           5.0M  8.0K  5.0M   1% /run/lock
/dev/loop5      105M  105M     0 100% /snap/core/17200
/dev/loop4       67M   67M     0 100% /snap/core24/490
/dev/loop0      128K  128K     0 100% /snap/bare/5
/dev/loop7       92M   92M     0 100% /snap/gtk-common-themes/1535
/dev/loop2       74M   74M     0 100% /snap/core22/1722
/dev/loop1      104M  104M     0 100% /snap/core/16928
/dev/loop6       67M   67M     0 100% /snap/core24/609
/dev/loop3       74M   74M     0 100% /snap/core22/1663
/dev/nvme0n1p4  434G   25G  387G   7% /home
/dev/loop8      449M  449M     0 100% /snap/telegram-desktop/6470
/dev/loop10     449M  449M     0 100% /snap/telegram-desktop/6474
/dev/loop9       45M   45M     0 100% /snap/snapd/23545
/dev/loop11      45M   45M     0 100% /snap/snapd/23258
/dev/nvme0n1p1  511M  5.9M  506M   2% /boot/efi
tmpfs           769M  2.5M  766M   1% /run/user/1000

saída de

sudo du -mx -d 1 / | sort -n
1   /.cache
1   /lost+found
1   /media
1   /mnt
1   /snap
1   /srv
1   /tmp
12  /etc
137 /boot
1410    /root
6540    /opt
7294    /var
10845   /usr
26235   /

atualização: 21 de janeiro de 2025 depois de ler todos os comentários e perceber o quão complicado, difícil de obter e muito caro isso vai levar

Vou pegar todas as minhas coisas importantes e reinstalar o Debian

a única coisa que resta é saber qual a melhor partição hoje em dia para não entrar nisso novamente no futuro

Vocês sugerem algo especial sobre isso?

debian
  • 2 respostas
  • 1234 Views
Martin Hope
Stanley Yu
Asked: 2025-01-13 06:51:18 +0800 CST

A expansão de parâmetros não definidos do bash para a string vazia está documentada em algum lugar?

  • 11

O bashshell expande parâmetros não definidos para a string vazia por padrão. No entanto, não consigo encontrar documentação oficial afirmando isso em lugar nenhum. É?

bash
  • 3 respostas
  • 780 Views
Martin Hope
vejeta
Asked: 2024-12-28 06:04:01 +0800 CST

O repositório do Spotify para Debian tem chaves desatualizadas

  • 11

Desde hoje, ao fazer o apt-get update, estou recebendo este erro:

Err:7 http://repository.spotify.com stable InRelease                                                                                                                                                            
   NO_PUBKEY C85668DF69375001

Siga as instruções para baixar as chaves mais recentes, conforme descrito em: https://www.spotify.com/es/download/linux/

não resolve o problema.

Já que não quero desabilitar a verificação e quero obter as chaves atualizadas.

Alguém sabe como resolver isso?

debian
  • 1 respostas
  • 1054 Views
Martin Hope
Fravadona
Asked: 2024-12-22 00:48:44 +0800 CST

Maneiras de manter arquivos em /tmp?

  • 11

Tenho uma estação de trabalho RHEL 8 que hospeda um aplicativo cuja interface gráfica do usuário (GUI) pode ser acessada via https.

Quando o aplicativo é iniciado, ele cria alguns arquivos de soquete /tmpcom nomes aleatórios e o .socksufixo:

$ ls -l /tmp/*.sock
srwx------ 1 app app 0 Dec 21 13:30 /tmp/supervisor-358513b0f6222d2339e4ab66d30b0037.sock
srwx------ 1 app app 0 Dec 21 13:31 /tmp/mongodb-358513b0f6222d2339e4ab66d30b0037.sock
srwx------ 1 app app 0 Dec 21 13:31 /tmp/livegui-358513b0f6222d2339e4ab66d30b0037.sock

$ file /tmp/*.sock
/tmp/supervisor-358513b0f6222d2339e4ab66d30b0037.sock: socket
/tmp/mongodb-358513b0f6222d2339e4ab66d30b0037.sock:    socket
/tmp/livegui-358513b0f6222d2339e4ab66d30b0037.sock:    socket

atualização: A parte "aleatória" dos nomes dos arquivos de soquete é, na verdade, um MD5 do caminho onde o aplicativo está instalado.

Quando as pessoas usam o aplicativo com frequência, ele funciona bem por semanas/meses, mas quando ninguém se conecta ao aplicativo por alguns dias, ele para de responder; quando isso acontece, posso ver que os .sockarquivos foram excluídos enquanto os processos do aplicativo ainda estavam em execução...

Existe alguma maneira de evitar a exclusão de alguns arquivos no /tmp?

linux
  • 4 respostas
  • 1000 Views
Martin Hope
lewisxy
Asked: 2024-12-03 16:48:45 +0800 CST

O bash pipe perde dados quando o comando falha

  • 11

Considere este programa simples ( abort.py) que escreve algum texto em stdoute stderre então trava ( abort()).

import os
import sys

print("end stdout")
print("end stderr", file=sys.stderr)
os.abort()

Quando executo no terminal, ambas as saídas para stdoute stderrsão produzidas corretamente.

$ python3 abort.py 
end stdout
end stderr
Aborted (core dumped)

Entretanto, se eu redirecionasse stdoute/ou stderrusasse outro programa (talvez para fins de registro), ele não funcionaria mais.

$ python3 abort.py | cat
end stderr

$ python3 abort.py |& cat

$ python3 abort.py | tee -a logs
end stderr

$ python3 abort.py |& tee -a logs

# file `logs` is unchanged

Na verdade, se o programa ( abort.py) produz muitos textos para stdoute stderr, apenas a última seção deles é perdida da perspectiva do programa receptor na outra ponta do pipe. Eu também tentei executar o programa em um script bash e executar esse script, mas o resultado é o mesmo.

Por que isso está acontecendo e como devo corrigir?

Fundo

O exemplo acima é obviamente artificial. O cenário do mundo real é que eu estava depurando um programa grande que ocasionalmente travava (segfault ou abortava) após rodar por dias. Ele produz muitos logs para ambos stdoute stderr, mas a informação mais importante sobre sua falha (como rastreamento de pilha) é impressa no final, logo antes da falha acontecer. Eu tenho um pipeline de log configurado em um script bash (envolve alguns teee gzippor exemplo), mas descobri que a última seção do log salvo está sempre faltando, o que é frustrante.

linux
  • 1 respostas
  • 687 Views
Martin Hope
q.undertow
Asked: 2024-11-28 12:35:34 +0800 CST

Por que o bash startup é executado sob ssh não interativo

  • 11

Vejo uma diferença inexplicável no comportamento com ssh no Linux e FreeBSD, e é o comportamento do FreeBSD que eu esperaria da linguagem simples das manpages. Então, algo extra acontece no Linux, mas não sei o que é.

Eu uso o bash como meu shell de login normal em todos os sistemas, tanto Linux quanto BSD. Com uma configuração complexa de vários estágios envolvendo os arquivos de inicialização do bash, eu configurei minhas variáveis ​​de ambiente para todas as encarnações do bash que são shell de "login" ou "interativo", no sentido técnico descrito no início da página de manual do bash.

Agora, a diferença: quando eu faço ssh em um servidor FreeBSD com um comando , por exemplo ssh freebsd-host printenv, essas variáveis ​​não são definidas. O que, depois de pensar um pouco, é o que eu deveria esperar, já que o shell nesse caso não é nem login nem interativo. Mas, quando eu faço ssh da mesma forma em um host Linux , as variáveis ​​são de fato definidas -- um sinal claro de que o .bash_profileou o .bashrcarquivo foi grokked de alguma forma ou de outra, apesar do não status do shell.

Minha pergunta é, claro, por que e como o Linux pode se comportar dessa maneira? O que faz com que o bash startup seja executado nessas circunstâncias? Toda a configuração sshd é exatamente a mesma e próxima dos padrões upstream, incluindo PermitUserEnvironment=no. Todos os Linuxes são variantes do Debian, se isso importa.

Uma anedota bônus: Eu tropecei nisso quando li algumas páginas de manual ssh -t host man mane não notei nada incomum em um Linux remoto, mas em um FreeBSD remoto a página de manual ficou extremamente limitada — porque minha configuração onipresente MANWIDTH=100não estava lá.

bash
  • 1 respostas
  • 298 Views
Martin Hope
Michele Turrini
Asked: 2024-10-24 21:43:09 +0800 CST

APT quebrado devido a bibliotecas python quebradas

  • 11

Estou no Debian 12. Cometi um erro de novato ao instalar bibliotecas Python (numpy, pandas, sklearn) usando o apt e agora sempre que tento instalar ou desinstalar alguma coisa recebo esse erro.

Ao instalar

thedude@192:~$ sudo apt install sl
[sudo] password for thedude: 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
 python3-bottleneck : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                      Depends: python3-numpy-abi9
 python3-contourpy : Depends: python3-numpy but it is not going to be installed
 python3-matplotlib : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                      Depends: python3-numpy-abi9
 python3-numexpr : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                   Depends: python3-numpy-abi9
 python3-pandas : Depends: python3-numpy but it is not going to be installed
                  Depends: python3-numpy (>= 1:1.18.5~) but it is not going to be installed or
                           python3 (< 3.10) but 3.11.2-1+b1 is to be installed
 python3-pandas-lib : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                      Depends: python3-numpy-abi9
                      Recommends: python3-numba but it is not going to be installed
 python3-pythran : Depends: python3-numpy but it is not going to be installed
 python3-scipy : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                 Depends: python3-numpy-abi9
 python3-sklearn : Depends: python3-numpy but it is not going to be installed
 python3-sklearn-lib : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                       Depends: python3-numpy-abi9
 python3-tables : Depends: python3-numpy but it is not going to be installed
 python3-tables-lib : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                      Depends: python3-numpy-abi9
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

Ao desinstalar:

thedude@192:~$ sudo apt remove python3-numpy
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package 'python3-numpy' is not installed, so not removed
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
 python3-bottleneck : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                      Depends: python3-numpy-abi9
 python3-contourpy : Depends: python3-numpy but it is not going to be installed
 python3-matplotlib : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                      Depends: python3-numpy-abi9
 python3-numexpr : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                   Depends: python3-numpy-abi9
 python3-pandas : Depends: python3-numpy but it is not going to be installed
                  Depends: python3-numpy (>= 1:1.18.5~) but it is not going to be installed or
                           python3 (< 3.10) but 3.11.2-1+b1 is to be installed
 python3-pandas-lib : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                      Depends: python3-numpy-abi9
                      Recommends: python3-numba but it is not going to be installed
 python3-pythran : Depends: python3-numpy but it is not going to be installed
 python3-scipy : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                 Depends: python3-numpy-abi9
 python3-sklearn : Depends: python3-numpy but it is not going to be installed
 python3-sklearn-lib : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                       Depends: python3-numpy-abi9
 python3-tables : Depends: python3-numpy but it is not going to be installed
 python3-tables-lib : Depends: python3-numpy (>= 1:1.22.0) but it is not going to be installed
                      Depends: python3-numpy-abi9
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

Tentei apt fix-broken installcomo a mensagem de erro sugere.

thedude@192:~$ sudo apt --fix-broken install
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  fonts-lato icu-devtools libclang-cpp14 libffi-dev libicu-dev libllvm14
  libncurses-dev libpfm4 libtinfo-dev libxml2-dev libz3-dev
  llvm-14-linker-tools llvm-14-runtime llvm-14-tools nss-plugin-pem
  python3-yaml sphinx-rtd-theme-common
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  python3-numpy
Suggested packages:
  gfortran
The following NEW packages will be installed:
  python3-numpy
0 upgraded, 1 newly installed, 0 to remove and 27 not upgraded.
Need to get 5,209 kB of archives.
After this operation, 28.5 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Err:1 http://deb.debian.org/debian bookworm/main amd64 python3-numpy amd64 1:1.24.2-1
  404  Not Found [IP: 146.75.54.132 80]
E: Failed to fetch http://deb.debian.org/debian/pool/main/n/numpy/python3-numpy_1.24.2-1_amd64.deb  404  Not Found [IP: 146.75.54.132 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

Meu entendimento é que a biblioteca que está gerando o erro é numpy. Descobri que ela é instalada digitando:

thedude@192:~$ sudo apt list python3-numpy
Listing... Done
python3-numpy/stable 1:1.24.2-1 amd64

Mas como mostrado não consigo removê-lo. Tentei atualizar e também --fix-missinge tambémautoremove

thedude@192:~$ sudo apt --fix-broken install --fix-missing
[sudo] password for thedude: 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  fonts-lato icu-devtools libclang-cpp14 libffi-dev libicu-dev libllvm14
  libncurses-dev libpfm4 libtinfo-dev libxml2-dev libz3-dev
  llvm-14-linker-tools llvm-14-runtime llvm-14-tools nss-plugin-pem
  python3-yaml sphinx-rtd-theme-common
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  python3-numpy
Suggested packages:
  gfortran
The following NEW packages will be installed:
  python3-numpy
0 upgraded, 1 newly installed, 0 to remove and 27 not upgraded.
Need to get 5,209 kB of archives.
After this operation, 28.5 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Err:1 http://deb.debian.org/debian bookworm/main amd64 python3-numpy amd64 1:1.24.2-1
  404  Not Found [IP: 146.75.54.132 80]
Unable to correct missing packages.
E: Failed to fetch http://deb.debian.org/debian/pool/main/n/numpy/python3-numpy_1.24.2-1_amd64.deb  404  Not Found [IP: 146.75.54.132 80]
E: Aborting install.

Tentei updatee funciona bem, mas não faz diferença.

Há algo que eu possa fazer para consertar isso?

debian
  • 2 respostas
  • 603 Views
Martin Hope
balupton
Asked: 2024-10-22 14:59:46 +0800 CST

Como contornar um caso extremo com o teste bash integrado quando o valor de uma variável é `>`

  • 11

O seguinte produz uma bash: test: too many argumentsexceção em test, com status de saída 2:

v='>'
test -n "$v" -a yes '!=' no # bash: test: too many arguments
echo $? # 2

test -n '>' -a 1 -eq 1 # bash: test: too many arguments
echo $? # 2

[ -n '>' -a 1 -eq 1 ] # bash: [: too many arguments
echo $? # 2

[[ -n '>' -a 1 -eq 1 ]]
# bash: syntax error in conditional expression
# bash: syntax error near `-a'
echo $? # 2

Ele funciona sem o -a e, como tal, funciona usando && em vez do -a:

v='>'
test -n "$v"
echo $? # 0

[ -n "$v" ]
echo $? # 0

test -n "$v" && test yes '!=' no
echo $? # 0

[ -n "$v" ] && [ yes '!=' no ]
echo $? # 0

Não há menção a esse comportamento peculiar na documentação: https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#index-test

Versões conhecidas afetadas: GNU bash, versão 5.2.37(1)-release (x86_64-apple-darwin22.6.0) GNU bash, versão 3.2.57(1)-release (x86_64-apple-darwin22)

Se esse for o comportamento pretendido, qual é a solução alternativa adequada?

  1. Devo sempre usar &&em vez de -a?
  2. Devo usar uma substituição de parâmetro? por exemplotest -n "${v//>/.}" -a 1 -eq 1
  3. Existe alguma outra sugestão?
bash
  • 1 respostas
  • 368 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve