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 / 问题

Perguntas[bash](unix)

Martin Hope
EmberNeurosis
Asked: 2025-04-29 09:22:55 +0800 CST

Tornando cada palavra em um arquivo de texto um item em uma matriz bash

  • 5

Tenho uma sequência de texto e espaços que se parece com isso:

macOS windows arch-linux ubuntu_linux

Quero anexar cada item (com espaços em branco indicando uma quebra entre eles) a um array bash. Como faço isso?

bash
  • 3 respostas
  • 59 Views
Martin Hope
Cestarian
Asked: 2025-04-26 11:54:13 +0800 CST

Usando chaves para processar variáveis ​​separadas por dois pontos

  • 9

Se fizermos:

VAR=100:200:300:400

Nós podemos fazer:

echo ${VAR%%:*}
100

e

echo ${VAR##*:}
400

Existe algum equivalente que eu possa usar para obter os valores de 200 e 300?

Por exemplo, uma maneira de obter apenas o que está entre o segundo e o terceiro dois pontos, especificamente no caso de haver mais de três dois pontos?

bash
  • 4 respostas
  • 353 Views
Martin Hope
Olivier Dulac
Asked: 2025-04-25 15:11:47 +0800 CST

bash - lista de mudanças drásticas

  • 5

Eu sei que o bash se esforça muito para manter as novas versões compatíveis com as anteriores.

No entanto, eles às vezes introduziram mudanças (pequenas, mas ainda assim) drásticas:

por exemplo quando não podíamos mais ter : { foo }# que agora trava

mas em vez disso tinha que ter: { foo ;} # ou seja, ter um ;ou uma nova linha antes do fechamento}

(não tenho certeza de qual versão introduziu isso, foi há mais de 20 anos ^^)

Minha pergunta é: como descobrir quais outras mudanças "importantes" ocorreram ao longo de todo o histórico de atualizações do bash?

bash
  • 1 respostas
  • 63 Views
Martin Hope
jrw32982
Asked: 2025-04-24 09:08:15 +0800 CST

Por que cd '' tem sucesso no bash?

  • 19

Talvez eu esteja perdendo, mas não encontro documentação que mostre que isso cd ''deveria funcionar. Como não há um diretório com o nome '', parece óbvio que deveria falhar. Por exemplo,

mydir=
cd -- "$mydir" || exit 1     # succeeds!!
echo wrong

Parece um bug em cerca de um milhão de scripts, só esperando para acontecer. Será que isso é algum tipo de bug de compatibilidade com versões anteriores? Eu realmente preciso fazer uma verificação separada para um nome de variável vazio toda vez que eu cd? Aliás, shellchecktambém não detecta isso.

bash
  • 1 respostas
  • 2517 Views
Martin Hope
Harimbola Santatra
Asked: 2025-04-22 21:46:50 +0800 CST

Como `*\ *` funciona no bash?

  • 5

Há uma resposta do SuperUser , que renomeia nomes de arquivos que contêm espaços em branco:

for f in *\ *; do mv "$f" "${f// /_}"; done

A parte que não entendo é *\ *.

O autor escreveu que:

*\ *Seleciona todos os arquivos com um espaço no nome como entrada para o loop for. O padrão X seleciona todos os arquivos com X no nome e, para o caractere especial espaço, precisamos usar uma barra para que o bash não o trate como uma separação de argumentos.

Já que *não corresponde a um espaço, por que *\ *também corresponde a arquivos com vários caracteres de espaço quando ele só tem um espaço?

bash
  • 2 respostas
  • 73 Views
Martin Hope
ivanbgd
Asked: 2025-04-17 23:55:11 +0800 CST

Como comparar a saída de um programa com um valor de referência em um script de shell?

  • 5

Tenho minha própria implementação de um servidor Redis que gostaria de testar por meio de um script de shell.

A ideia geral é alimentá-lo com alguns comandos por meio de nc, e como ncimprime a saída do meu programa (resposta) para stdout, capturar a resposta em uma variável de script e compará-la com a saída esperada.

Não consegui fazê-lo funcionar e não sei qual é o problema e como resolvê-lo.

Esta é uma parte do roteiro:

#!/bin/bash

set -eu

PORT=6380;

RUST_LOG=info ./run.sh --port $PORT 2>/dev/null & sleep 1; # Give it some time to start.

i=0;

i=$((i+1)); printf 'Running test #%d...' "$i";
response=$(printf "*1\r\n\$4\r\nPING\r\n" | nc localhost $PORT);
if [ "$response" = '+PONG\r\n' ]; then
  printf ' PASSED'
else
  printf ' FAILED\nGot:\n%s\n\n' "$response"
fi;
sleep 0.1;

pkill redis-server;

Este é apenas um exemplo de teste. Quando um usuário envia o PINGcomando, a resposta esperada é PONG, mas ela é codificada e enviada de volta como +PONG\r\n.

A saída CLI deste teste ( $ ./test.sh) é:

Running test #1... FAILED
Got:
+PONG

Então, parece que a variável $responserealmente contém o que deveria.

Tentei remover +, \r, \n, \r\nda saída de referência sem sucesso, só para ver se isso ajudaria.

Terei testes mais complicados que incluem um caractere que precisa ser escapado ( $), como \$5\r\nHello, na resposta.

A propósito, a configuração manual responsefunciona conforme o esperado.

response='+PONG\r\n';
if [ "$response" = '+PONG\r\n' ]; then
  echo Equal
else
  echo Different
fi;

Isto imprime Equal, como esperado.

Depois de adicionar a saída de depuração por meio de set -ex, posso ver que $responsearmazena +PONG\r, ou seja, sem \n.

Running test #1...++ printf '*1\r\n$4\r\nPING\r\n'
++ nc localhost 6380
+ response=$'+PONG\r'
+ '[' $'+PONG\r' = '+PONG\r\n' ']'
+ printf ' FAILED\nGot:\n%s\n\n' $'+PONG\r'
 FAILED
Got:
+PONG

Certo, então definir a saída de referência +PONG\rdeve funcionar, certo?

Running test #1...++ printf '*1\r\n$4\r\nPING\r\n'
++ nc localhost 6380
+ response=$'+PONG\r'
+ '[' $'+PONG\r' = '+PONG\r' ']'
+ printf ' FAILED\nGot:\n%s\n\n' $'+PONG\r'
 FAILED
Got:
+PONG

Claramente não.

Tentei encapsular responseem {}, assim: if [ "${response}" = '+PONG\r' ]; then, sem sucesso.

O que estou perdendo?

Também estou curioso para saber como e por que \nme perdi.

Estou executando-o zshem um Mac, se isso for mencionado, mas o comando diz claramente para usar bash.

Se eu executar ps -p $$o script de teste, obtenho 51547 ttys003 0:00.02 /bin/bash ./test.sh.

bash
  • 1 respostas
  • 100 Views
Martin Hope
gboffi
Asked: 2025-04-17 21:52:05 +0800 CST

Executar em segundo plano, evitando qualquer mensagem de controle de tarefa do shell [duplicado]

  • 9
Esta pergunta já tem respostas aqui :
desabilitando o controle de tarefas no bash (CTRL-Z) (4 respostas)
Fechado há 5 dias .

Vamos definir uma função shell (aqui o shell é Bash) e testá-la

$ s () { xterm -e sleep 5 & }
$ s
[1] 307926
$ 
[1]+  Done                    xterm -e sleep 5
$ 

Com meu significado específico de melhor , posso redefinir sassim

$ s () { xterm -e sleep 5 & disown ; }
$ s
[1] 307932
$ 
$ 

(nenhuma mensagem do shell quando o trabalho estiver concluído).

Aqui eu tenho que perguntar, é possível definir spara que eu tenha

$ s () { pre_magic xterm -e sleep 5 post_magic ; }
$ s
$ 
$ 

ou seja, suprimir as informações do trabalho impressas no terminal pelo shell?

bash
  • 1 respostas
  • 159 Views
Martin Hope
Mihir
Asked: 2025-04-17 07:36:15 +0800 CST

Mesclando valores de 2 arquivos YAML no bash

  • 7

Um comando bash:

$(System.DefaultWorkingDirectory)/yq_linux_amd64 '. *= load("${{ parameters.HELM_CHART_PATH }}/values/DEV/${{ parameters.COMPONENT }}.yaml")' ${{ parameters.HELM_CHART_PATH }}/values/global-values.yaml > $(System.DefaultWorkingDirectory)/deployment-values.yaml

Está mesclando valores de 2 arquivos YAML e enviando a saída mesclada para um único arquivo. Não consigo entender a sintaxe da primeira aspa simples até que a saída seja redirecionada. Alguém pode me ajudar a entender o que isso significa?

Por que ambos os operandos estão depois do operador *=? , que .é o diretório atual, mas o que significa antes de *=?

Além disso, por que apenas o 1º operando está entre load ()e qual é o seu significado?

bash
  • 2 respostas
  • 94 Views
Martin Hope
kj-crypto
Asked: 2025-04-14 19:10:48 +0800 CST

Como verificar se o env existe no bash?

  • 4

Qual é a maneira padrão, no bash, de verificar se uma variável de ambiente está configurada? Estou um pouco confuso entre as seguintes opções:

  1. ! [ -z "${VAR}" ]
  2. [ -n "${VAR}" ]
  3. [ "${VAR}" ]

Ou existe uma abordagem melhor?

bash
  • 2 respostas
  • 87 Views
Martin Hope
Matteo
Asked: 2025-04-13 20:51:02 +0800 CST

como passar variáveis ​​de ambiente para singularity exec

  • 7

Tenho um BASHpipeline que em determinado momento executa um Singularitycontêiner com singularity exec da seguinte maneira:

singularity exec --bind `pwd`:/folder --bind $d:/results <image>.sif <tool_command> -i /folder/<file>.fastq -v /results/<output>/<file>.vcf -r /folder/<reference>.fna -s <vcf_sample_name> -j 24 -t 24 -o /results/<output_file_suffix>

Como estou executando vários experimentos ao mesmo tempo com uma matriz, estou redefinindo os experimentos com uma variável de ambiente que desejo adicionar ao <output_file_suffix>; funciona para todas as etapas do pipeline, mas Singularityparece que não consegue ver a(s) variável(is) que estou definindo no meu script...

Alguém tem alguma dica de como fazer isso? Pesquisei um pouco, mas --envparece que não está funcionando. Agradeço desde já!

bash
  • 1 respostas
  • 290 Views

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