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 / user-101311

Daniel Kaplan's questions

Martin Hope
Daniel Kaplan
Asked: 2025-04-02 02:58:39 +0800 CST

Usando a expansão de histórico do bash, você pode substituir o primeiro argumento da última vez que um comando foi executado, quando não é o comando mais recente?

  • 6

A referência da Expansão da História do GNU não tem exemplos, então não sei se isso é possível.

Aqui está o que eu quero fazer. Eu corri cat long/path/to/file1.txt | less, então eu corri vim file2.txt. Usando a expansão do histórico, eu gostaria de correr, cat even/longer/path/to/file3.txt | lessmas não quero:

  • Digite long/path/to/file1.txt, pois é inconveniente digitar.
  • Consulte o comando anterior com um número; quero me referir a ele com uma string. ou seja, Use !cat..., mas não!-2...

Isso pode ser feito?


Aqui está o que eu tentei (não funciona):

!cat:^!cat:1^even/longer/path/to/file3.txt^

Aqui está meu processo de pensamento:

  1. !cat- Substitua o último comando que começou com a string cat.
  2. :^x^y^- Substitua xpor yneste comando
    1. !cat:1- Expandir para o primeiro argumento do último catcomando, ou seja,long/path/to/file1.txt
    2. even/longer/path/to/file3.txt– A substituição desse texto expandido

Um motivo óbvio para isso não funcionar é que estou aninhando expansões em expansões: !cat:1é interpretado como uma string literal.

Recebo esta saída:

long/path/to/file1.txtlong/path/to/file1.txteven/longer/path/to/file3.txt^: No such file or directory
bash
  • 2 respostas
  • 48 Views
Martin Hope
Daniel Kaplan
Asked: 2024-01-04 11:19:43 +0800 CST

Como leio a página de manual `/bin/kill` do Cygwin sem que o `kill` interno do bash interfira?

  • 5

Estou usando o Cygwin no Windows 10, mas também uso o Ubuntu com WSL2. Não posso reproduzir isso com o último. Quando digito man killcygwin, diz No manual entry for kill. Quando digito man /bin/kill, parece mostrar o arquivo correto, mas está imprensado entre jargões binários:

insira a descrição da imagem aqui

Como executo manpara visualizar esta página corretamente?

windows
  • 1 respostas
  • 42 Views
Martin Hope
Daniel Kaplan
Asked: 2022-09-22 17:15:28 +0800 CST

Como posso/devo usar sinalizadores padrão ao executar um comando?

  • 1

Por contexto, estou usando zsh. Toda vez que uso locate, quero passar os sinalizadores -ie .-A

Normalmente, se eu conseguir, crio um aliascom o mesmo nome do comando existente para fazer isso. Mas de acordo com esta pergunta , os aliases não podem aceitar argumentos, então eu tenho que usar uma função. Normalmente paro por aí porque a ideia de uma função com o mesmo nome de um comando parece errada para mim, embora não possa dizer por quê.

Eu estava prestes a finalmente criar tal função quando tive este pensamento: este é um padrão comum para mim, querendo sinalizar os padrões para o comando; existe uma maneira mais fácil de fazer isso? Talvez o zsh forneça uma solução melhor para esse problema?

Isso me levou a outro pensamento: é um antipadrão substituir um comando existente? Eu sempre fiz isso porque me permite pular uma associação na minha cabeça: por exemplo, "Por que não lltem uma manpágina? Ah sim: llrealmente significa ls -la. Eu preciso fazer man ls, não man ll. Etc."

Para resumir:

  1. Está certo/idiomático substituir um comando existente por um alias/função?
  2. O zsh ou alguma outra ferramenta fornece uma maneira mais direta de sinalizadores padrão para um comando específico?
zsh alias
  • 2 respostas
  • 44 Views
Martin Hope
Daniel Kaplan
Asked: 2022-09-21 16:09:42 +0800 CST

O updatedb pode manter os caminhos locais para unidades removíveis que não estão conectadas?

  • 2

Eu corro updatedb assim:updatedb --localpaths="/a /b"

/aé uma unidade removível. /bé o disco rígido local. Embora /anem sempre seja acessível para mim, frequentemente quero executar locatepara descobrir se tenho um determinado arquivo nele (com base na última vez que executei updatedb).

O problema é que, se eu executar updatedbquando não estiver conectado, recebo um erro:

/usr/bin/find: '/a': No such file or directory

O banco de dados obtém as informações mais recentes sobre /b, mas remove /aos dados existentes de . Existe uma maneira de manter /aos dados quando /anão está conectado durante updatedb?

Acho que isso pode ser possível com vários bancos de dados, um para /ae outro para /b. Em seguida, um script pode verificar se /aestá ou não conectado quando decide se deve ou não updatedb.

Mas a página de manual para ambos os comandos assume que eu sei muito mais do que sei (por exemplo, o que FINDOPTIONSsabe), então espero que haja uma solução mais fácil para esse problema.

bash ubuntu
  • 1 respostas
  • 27 Views
Martin Hope
Daniel Kaplan
Asked: 2022-04-28 12:07:02 +0800 CST

Como faço para lidar com caracteres de caminho estranhos quando a tubulação encontra a saída?

  • 1

Eu tive um problema em que queria encontrar o comprimento de cada caminho de um findcomando. Minha primeira tentativa foi executar algo assim:

find . -exec sh -c "echo {} | wc -c" \;

Eu tenho essa idéia desta resposta . (O comando acima não é minha pergunta, estou apenas usando-o como exemplo e é completamente artificial. Além disso, às vezes posso precisar de mais de um pipe.)

Mas quando o executei, houve erros na saída, provavelmente devido a caracteres especiais nos caminhos de saída. Infelizmente, não tenho conhecimento para solucionar quais caminhos causaram o problema e as mensagens de erro não eram informativas. Sem considerar...

Mais tarde, tropecei nesta resposta :

O findcomando executa o comando diretamente. O comando, incluindo o argumento do nome do arquivo, não será processado pelo shell ou qualquer outra coisa que possa modificar o nome do arquivo. É muito seguro.

Isso parece muito conveniente. Tão conveniente, de fato, que a -exec sh -c ..."cura" parece pior que a doença.

Então, minha pergunta é: o que devo fazer quando preciso canalizar comandos finde meus caminhos podem ter caracteres especiais? Existe uma solução genérica para este problema onde eu não tenha que considerar um monte de ressalvas? Estou usando bash.


Nota: Esta é uma pergunta semelhante: qual a melhor forma de enviar a saída de um comando find + exec para um pipeline? A diferença é que não estou necessariamente tentando canalizar a saída para fora do -exec. ou seja, se find ... -exec ... foo {} | bar \;é o caminho a seguir, está perfeitamente bem para mim. Estou apenas procurando um caminho genérico de menor resistência, a estrutura do comando não é importante para mim.

bash find
  • 2 respostas
  • 66 Views
Martin Hope
Daniel Kaplan
Asked: 2022-03-25 22:20:44 +0800 CST

Remover o padrão correspondente da saída do grep?

  • 1

Com o bash, estou executando isto: declare -p | grep 'declare -- 'Isso imprime linhas inteiras. Quero imprimir essas mesmas linhas, mas queria excluir a correspondência em si. ou seja, posso fazer ... | grep pattern | sed 's/pattern//'como um único comando? Seria como o oposto da -oopção.

Meu comando gera isso:

...
declare -- MAX_CONNECTIONS_PER_SERVER="6"
declare -- OPTERR="1"
declare -- OSTYPE="linux-gnu"
...

Mas eu quero produzir isso:

...
MAX_CONNECTIONS_PER_SERVER="6"
OPTERR="1"
OSTYPE="linux-gnu"
...

Normalmente, eu apenas canalizaria isso para sed, mas coincidentemente, eu queria fazer isso duas vezes hoje. Eu olhei para a página de manual, mas não vi nenhuma opção que pudesse fazer isso.

Retornar apenas a parte de uma linha após um padrão de correspondência é uma pergunta muito semelhante. Talvez seja até uma duplicata. Pode-se argumentar que o meu é um pouco mais estreito: é garantido que o padrão que estou grepping e o padrão que estou removendo serão os mesmos. Eu quero remover x. A questão quer remover .*x.

grep sed
  • 5 respostas
  • 1176 Views
Martin Hope
Daniel Kaplan
Asked: 2022-03-25 21:54:26 +0800 CST

Como imprimo os nomes e valores de todas as variáveis ​​definidas em MEU SCRIPT?

  • 2

Estou trabalhando em um script e realmente me ajudaria, nesse contexto, se eu pudesse ver um dump de todos os nomes e valores de variáveis ​​definidas pelo script. Aqui está um exemplo:

foo="1"
bar="2"

print_script_variables 

baz="3"

print_script_variables 

Isso geraria:

foo="1"
bar="2"

foo="1"
bar="2"
baz="3"

Existe algo como print_script_variables? Tenho a sensação de que analisar os scripts que você está executando é uma tarefa tola.

Se isso não existir, eu apenas digitaria um monte de echocomandos à mão. Isso é meio chato, porque eu gostaria de mudar para onde coloco print_script_variablesenquanto soluciono problemas sem ter que me preocupar com quais variáveis ​​entram e saem do escopo.

Este é um script bash, mas eu uso zsh no meu terminal, então algo que funcionasse em ambos seria o ideal.

bash shell-script
  • 1 respostas
  • 692 Views
Martin Hope
Daniel Kaplan
Asked: 2019-10-29 17:51:22 +0800 CST

Como eu mesclaria parte da próxima linha na linha atual?

  • 0

Eu tenho um arquivo com uma estrutura assim:

M: a
M: b
Player: c
M: d
Sequencer.Play( SpineAnimation(foo, speaker)@0 )
Player: e
M: f
Sequencer.Play( SpineAnimation(bar, speaker)@0 )
...

Como faço para converter isso em um arquivo como este:

M: a
M: b
Player: c
M foo: d
Player: e
M bar: f
...

Em outras palavras, se a próxima linha tiver Sequencer.Play( SpineAnimation(..., quero pegar a palavra depois dela e colocá-la antes dos dois pontos na linha atual.

Não tenho certeza de qual seria a melhor ferramenta para isso, estou pensando awk, mas, novamente, acho que será muito complicado com essa ferramenta. Estou aberto a usar qualquer comando para fazer isso. Eu tentei fazer algo como a resposta aqui: Mesclar duas linhas em uma, escolhendo palavras selecionadas de ambas. Mas essa pergunta não parece trivialmente diferente porque a Sequencer.Playlinha nem sempre está lá.

text-processing
  • 1 respostas
  • 40 Views
Martin Hope
Daniel Kaplan
Asked: 2018-07-31 10:09:17 +0800 CST

Por que os espaços estão ecoando como novas linhas?

  • 2

Eu tenho esses dados JSON que se parecem com isso:

[
  {
    "loginId": "7638749",
    "customerprofileDetails": {
      "securityQuestions": [
        "What is your favorite sports team?",
        "What is your favorite song?",
        "Who is your favorite artist?"
      ]
    }
  }
]

Eu tenho um script onde passo esse arquivo como o primeiro argumento. O script fica assim:

for json in `cat $PWD/$1 | jq -cr '.[]'` ; do
    echo "$json"
done

Por algum motivo, quando executo este script, ele gera isso:

> fileFromJson.sh tmp2.json
{"loginId":"7638749","customerprofileDetails":{"securityQuestions":["What
is
your
favorite
sports
team?","What
is
your
favorite
song?","Who
is
your
favorite
artist?"]}}

Por que essas novas linhas estão lá e o que está causando esse problema? Quando eu apenas executo cat $PWD/tmp2.json | jq -cr '.[]', ele imprime em uma linha. Estou usando o MacOS se isso importa.

bash echo
  • 2 respostas
  • 4394 Views
Martin Hope
Daniel Kaplan
Asked: 2018-07-28 11:11:24 +0800 CST

Divida uma matriz JSON em vários arquivos

  • 7

Eu tenho um arquivo que se parece com isso:

[
  {
    "billingAccountNumber": "x",
    "paymentResponseObject": {
      "uiErrorDipslayMessage": "",
      "transactionStatus": "S",
      "transactionDescription": "",
      "transactionCode": "",
      "confirmationNumber": "1"
    }
  },
  {
    "billingAccountNumber": "y",
    "paymentResponseObject": {
      "uiErrorDipslayMessage": "",
      "transactionStatus": "S",
      "transactionDescription": "",
      "transactionCode": "",
      "confirmationNumber": "2"
    }
  },
  {
    "billingAccountNumber": "z",
    "paymentResponseObject": {
      "uiErrorDipslayMessage": "",
      "transactionStatus": "S",
      "transactionDescription": "",
      "transactionCode": "",
      "confirmationNumber": "3"
    }
  }
]

Os dados não são exatamente assim, e eu tenho mais de três elementos. A partir desses dados, quero criar três arquivos: x.json, y.json, e z.json. Eu quero que o conteúdo de cada um desses arquivos seja o conteúdo do arquivo paymentResponseObject.

Existe uma maneira de fazer isso com jq? Eu descobri como fazer isso em awk, mas é muito desajeitado e quero repetir esse processo com esquemas diferentes. Eu tenho que reescrever 80% do awkscript para cada esquema.

files json
  • 3 respostas
  • 7092 Views
Martin Hope
Daniel Kaplan
Asked: 2018-07-27 15:35:56 +0800 CST

Renomeie um grupo de arquivos para uma string que existe dentro de cada um

  • 1

Eu tenho um grupo de arquivos json. Cada arquivo contém um objeto json e todos eles têm o mesmo esquema. Existe um campo no json para o qual quero renomear o arquivo. Como eu posso fazer isso?

Eu cheguei a esta solução:

find . -name '*.json' | xargs -i mv {} $(cat {} | jq '.billingAccountList[0]' | tr -d \").json

Mas não funciona, pois catestá tentando interpretar o {}. Eu esperava que os xargs o interpretassem. Dá-me este erro:

cat: {}: No such file or directory
awk xargs
  • 3 respostas
  • 123 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