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-220462

Porcupine's questions

Martin Hope
Porcupine
Asked: 2025-01-13 14:29:22 +0800 CST

Local: Não foi possível obter a data correta (para domingo desta semana)

  • 7
  • Fiz o seguinte ontem à noite (antes da meia-noite de domingo na Alemanha):

  • Data de hoje

$ LC_TIME="en.GB.UTF8" date --iso-8601
2025-01-12
  • Data de hoje (dia da semana
$ LC_TIME="en.GB.UTF8" date +%u
7

$ LC_TIME="en.GB.UTF8" date +%a
Sun

Emitir

  • Como a semana começa de segunda a domingo, a segunda-feira desta semana deve ser 2025-01-06
$ LC_TIME="en_GB.UTF-8" date -d "this-week-monday" --iso-8601
2025-01-13
$ LC_TIME="en_IE.UTF-8" date -d "this-week-monday" --iso-8601
2025-01-13
$ LC_TIME="en_IN.UTF-8" date -d "this-week-monday" --iso-8601
2025-01-13
$ LC_TIME="en_US.UTF-8" date -d "this-week-monday" --iso-8601
2025-01-13
$ LC_TIME="en_DE.UTF-8" date -d "this-week-monday" --iso-8601
2025-01-13
$ LC_TIME="en_JP.UTF-8" date -d "this-week-monday" --iso-8601
2025-01-13
$ LC_TIME="en_DK.UTF-8" date -d "this-week-monday" --iso-8601
2025-01-13
$ LC_TIME="en_CA.UTF-8" date -d "this-week-monday" --iso-8601
2025-01-13
$ LC_TIME="en_AU.UTF-8" date -d "this-week-monday" --iso-8601
2025-01-13

Outra observação

Fiz isso hoje em 2025-01-13 (na Alemanha)

$ LC_TIME="en_AU.UTF-8" date -d "this-week-sunday" --iso-8601
2025-01-19
$ LC_TIME="en_AU.UTF-8" date -d "last-week-sunday" --iso-8601
2025-01-12
$ LC_TIME="en_AU.UTF-8" date -d "next-week-sunday" --iso-8601
2025-01-26

Emitir

Então, hoje parece estar dando resultados parcialmente corretos. O que está errado na saída de hoje: se da saída de ontem this-week-mondayestava 2025-01-13assim, de alguma forma o computador estava contando domingo como o primeiro dia da semana em cada localidade (que mostrei acima). Então "this-week-sunday"deveria ser ontem e não 2025-01-19 (como mostrado hoje).

Resumo

Ontem

$ LC_TIME="en_GB.UTF-8" date -d "this-week-monday" --iso-8601
2025-01-13

Hoje

env -i bash --norc --noprofile
bash-5.2$ LC_TIME="en_AU.UTF-8" date -d "this-week-sunday" --iso-8601
2025-01-19

Problema : Então, se ontem (2025-01-12, domingo) this-week-mondayfoi dia 13, hoje this-week-sundaydeveria ser ontem e não . 2025-01-19 Por que estou recebendo a data errada?

bash
  • 1 respostas
  • 181 Views
Martin Hope
Porcupine
Asked: 2024-05-09 23:38:11 +0800 CST

printf - armazena a saída de string formatada em uma variável

  • 11

Em vez do seguinte

printf '%s\t%s\t%s\t%s\n' 'index' 'podcast' 'website' 'YouTube'

Quero armazenar a saída do printf em uma variável Results, como posso fazer isso?

bash
  • 1 respostas
  • 458 Views
Martin Hope
Porcupine
Asked: 2024-05-07 04:27:53 +0800 CST

jq pula iteração sobre null

  • 8

Estou usando jq 1.7

Dados

Estou operando em info.json baixado por yt-dlp

yt-dlp --write-info-json --skip-download https://www.youtube.com/watch?v=vlIO-7Rpi7c

JQ - Tarefa

  • Agora quero remover todo array dentro das legendas cujo nome não é de, en-USe dentro de, en-USselecionar todos os objetos com elemento ext == vtt.

Isso funciona com sucesso da seguinte maneira :

jq 'pick(.subtitles | .de[],."en-US"[] | select (.ext == "vtt")) | del(..|nulls)' *.json

saída

{
  "subtitles": {
    "de": [
      {
        "ext": "vtt",
        "url": "https://www.youtube.com/api/timedtext?v=vlIO-7Rpi7c&ei=JS05ZoT2Ftf0i9oP8dy4mAo&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1715048341&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=AB2ECEEABF48D1A16ADC7ACCB8A072D63EE12DCC.5F56904251766FB68624A68FF2BBB57B9CCFFD2F&key=yt8&lang=de&fmt=vtt",
        "name": "German"
      }
    ],
    "en-US": [
      {
        "ext": "vtt",
        "url": "https://www.youtube.com/api/timedtext?v=vlIO-7Rpi7c&ei=JS05ZoT2Ftf0i9oP8dy4mAo&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1715048341&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=AB2ECEEABF48D1A16ADC7ACCB8A072D63EE12DCC.5F56904251766FB68624A68FF2BBB57B9CCFFD2F&key=yt8&lang=en-US&fmt=vtt",
        "name": "English (United States)"
      }
    ]
  }
}

Emitir

Para alguns vídeos do Youtube, o arquivo json não contém "en-US", mas contém "en", enquanto alguns contêm todos os três de, en, en-US. Então eu escrevi o seguinte

jq 'pick(.subtitles | .de[],.en[],."en-US"[] | select (.ext == "vtt")) | del(..|nulls)' *.json

Erro

jq: erro (em: 69): Não é possível iterar sobre nulo (nulo)

É necessária ajuda

Como selecionar apenas .ext == "vtt" apenas para o idioma en,en-US,de se nem todos esses idiomas estiverem presentes no arquivo json?

array
  • 1 respostas
  • 255 Views
Martin Hope
Porcupine
Asked: 2024-05-06 22:18:00 +0800 CST

AWK: regex não é processado quando passado como variável

  • 5

Alguma sugestão? Eu li: Sequências de escape (Guia do usuário GNU Awk)

Exemplo representativo

$ Filesystem='/dev/mapper/vgubuntu-Media'
$ FilesystemRegex="$(echo "${Filesystem}" | sed "s~/~\\\/~g")"
$ echo "$FilesystemRegex"
\/dev\/mapper\/vgubuntu-Media
$ df -H "${Filesystem}" | awk -v Regex="${FilesystemRegex}" '/$Regex/{print $5}'
awk: warning: escape sequence `\/' treated as plain `/'
$ df -H "${Filesystem}" | awk '/\/dev\/mapper\/vgubuntu-Media/{print $5}'  
62%
bash
  • 2 respostas
  • 88 Views
Martin Hope
Porcupine
Asked: 2024-01-08 02:32:17 +0800 CST

lsblk: Por que FSSIZE não é igual a FSAVAIL + FSUSED

  • 5
sudo lsblk --fs -o NAME,FSTYPE,SIZE,FSSIZE,FSUSED,FSAVAIL,FSUSE%,MOUNTPOINTS,LABEL,PATH | grep -v '^loop'

NAME                    FSTYPE       SIZE FSSIZE FSUSED FSAVAIL FSUSE% MOUNTPOINTS    LABEL          PATH
zram0                                  8G                              [SWAP]                        /dev/zram0
nvme0n1                              1.8T                                                            /dev/nvme0n1
├─nvme0n1p1             ext4         768M                                                            /dev/nvme0n1p1
├─nvme0n1p2             ext4         768M 738.4M 240.9M  443.8M    33% /boot          FedoraBoot     /dev/nvme0n1p2
├─nvme0n1p3             ext4         768M                                             UnassignedBoot /dev/nvme0n1p3
├─nvme0n1p4             vfat         128M 127.7M  22.4M  105.3M    18% /boot/efi      EFI-SP         /dev/nvme0n1p4
└─nvme0n1p5             LVM2_member  1.8T                                                            /dev/nvme0n1p5
  ├─vgubuntu-FedoraRoot ext4         100G  98.1G  47.9G   45.2G    49% /              FedoraRoot     /dev/mapper/vgubuntu-FedoraRoot
  ├─vgubuntu-FedoraSwap swap          32G                              [SWAP]                        /dev/mapper/vgubuntu-FedoraSwap
  ├─vgubuntu-UbuntuSwap swap          32G                                                            /dev/mapper/vgubuntu-UbuntuSwap
  ├─vgubuntu-UbuntuRoot ext4          50G                                                            /dev/mapper/vgubuntu-UbuntuRoot
  ├─vgubuntu-UbuntuHome ext4          18G                                                            /dev/mapper/vgubuntu-UbuntuHome
  ├─vgubuntu-FedoraHome ext4          18G  17.5G   6.5G   10.1G    37% /home          FedoraHome     /dev/mapper/vgubuntu-FedoraHome
  ├─vgubuntu-Data       ext4         100G  98.1G    82G   11.6G    84% /mnt/Data      Data           /dev/mapper/vgubuntu-Data
  ├─vgubuntu-Documents  ext4         250G   245G 208.5G     24G    85% /mnt/Documents Documents      /dev/mapper/vgubuntu-Documents
  ├─vgubuntu-Media      ext4         500G 491.1G 331.2G  134.8G    67% /mnt/Media     Media          /dev/mapper/vgubuntu-Media
  └─vgubuntu-Backup     ext4         100G  97.9G   9.1G   83.7G     9% /mnt/Backup    Backup         /dev/mapper/vgubuntu-Backup

filesystems
  • 1 respostas
  • 19 Views
Martin Hope
Porcupine
Asked: 2023-10-04 04:26:48 +0800 CST

Altere o comportamento do script bash se executado a partir de outro script

  • 5

Eu tenho um script (digamos Task.sh) (com permissão executável):

Pseducódigo:

if [[ Not called from inside a script ]]; then
  echo 'Not called from inside a script'
else
  echo 'Called from a script'
fi

Eu tenho um script que diz Main.sh(com permissão executável):

Value=$(Task.sh)
echo "${Value}"

Resultado esperado

$ Task.sh
Not called from inside a script

$ Main.sh
Called from a script

Pedido de ajuda

Por favor, sugira qual condicional colocar no pseudocódigo paraTask.sh

bash
  • 2 respostas
  • 48 Views
Martin Hope
Porcupine
Asked: 2023-07-14 03:15:59 +0800 CST

Armazena saída multilinha em variável separada

  • 5

Um script gera saída de 3 linhas:

$ Filename /a/Resource/.Filename.man.markdown
.Filename.man.markdown
.Filename
man.markdown

O que eu quero fazer

Eu quero armazenar a saída de 3 linhas em uma variável separada, como posso fazer isso?


Eu tentei o seguinte - Por que falha e como fazê-lo corretamente?

1ª tentativa falhada

Filename /a/Resource/.Filename.man.markdown | IFS=$'\n' read -r File1 Filename1 Extension1
echo "$File1 $Filename1 $Extension1"

2ª tentativa falhada

$ IFS=$'\n' read -r File1 Filename1 Extension1 < <(Filename /a/Resource/.Filename.man.markdown)
$ echo "$File1 $Filename1 $Extension1"
.Filename.man.markdown  
bash
  • 1 respostas
  • 36 Views
Martin Hope
Porcupine
Asked: 2022-05-25 11:51:34 +0800 CST

Acrescentar um caractere no início da próxima linha que corresponda ao padrão em todo o arquivo

  • 0

Arquivo de teste:

cat Test.txt
#EXTM3U

#EXTINF:100
a.flac

#EXTINF:20
b.flac

resultado esperado

cat Test.txt
#EXTM3U

#EXTINF:100
#a.flac

#EXTINF:20
#b.flac

Experimento 1

sed -e '/^#EXTINF/a #'  Test.txt
#EXTM3U

#EXTINF:100
#
a.flac

#EXTINF:20
#
b.flac

Sugestões?

Meu experimento adiciona uma nova linha após anexar #, não quero que essa nova linha seja adicionada.

bash sed
  • 2 respostas
  • 40 Views
Martin Hope
Porcupine
Asked: 2022-03-01 11:51:10 +0800 CST

Remova todos os caracteres até a primeira letra ([a-zA-Z]) em uma string

  • 0

Eu quero remover todos os caracteres até a primeira letra [a-zA-Z] em uma string. Por exemplo:

#121Abc-->Abc

%Ab#c-->Ab#c

Ab#c-->Ab#c

Abc-->Abc

1Abc-->Abc

1 21Abc-->Abc

1^1 Abc-->Abc

Nota: Todas as não letras incluem caracteres não imprimíveis.

É possível com ferramentas bash?

bash text-processing
  • 5 respostas
  • 1317 Views
Martin Hope
Porcupine
Asked: 2022-01-06 08:51:40 +0800 CST

`column` de `util-linux` e não de `bsdmainutils`

  • 0

columnestá disponível em pacotes util-linuxe bsdmainutils. Ambos os pacotes estão instalados no Linux Mint 20.2

$ type column
column is /usr/bin/column
column is /bin/column

Ambas as colunas estão apontando para a ferramenta de coluna bsd. Como posso acessar a ferramenta de util-linux?

linux-mint columns
  • 2 respostas
  • 311 Views
Martin Hope
Porcupine
Asked: 2021-11-20 05:23:48 +0800 CST

Comando `type` dentro do script bash, não está mostrando todos os caminhos

  • 0

Quando digito echo "${PATH}" | tr -s ':' '\n' | nlde dentro de um script bash e no terminal recebo o mesmo resultado:

     1  /home/nikhil/Documents/Git/Cs/Architecture/bin
     2  /home/nikhil/.local/bin
     3  /home/nikhil/opt/.nvm/versions/node/v16.13.0/bin
     4  /home/nikhil/opt/bin
     5  /usr/local/sbin
     6  /usr/local/bin
     7  /usr/sbin
     8  /usr/bin
     9  /sbin
    10  /bin
    11  /usr/games
    12  /usr/local/games
    13  /snap/bin
    14  /home/linuxbrew/.linuxbrew/bin
    15  /home/linuxbrew/.linuxbrew/sbin
    16  /home/nikhil/.cargo/bin
    17  /home/nikhil/.cabal/bin
    18  /home/nikhil/opt/go/bin
    19  /home/nikhil/.ruby/bin
    20  /home/linuxbrew/.linuxbrew/opt/fzf/bin

Mas quando digito o seguinte dentro de um script bash e no terminal, recebo resultados diferentes:

# From Terminmal
$ type pandoc
pandoc is aliased to `/usr/bin/pandoc'
pandoc is /usr/bin/pandoc
pandoc is /home/linuxbrew/.linuxbrew/bin/pandoc
pandoc is /home/nikhil/.cabal/bin/pandoc
# From inside bash script
pandoc is /usr/bin/pandoc

Por que typetem saída diferente de dentro do bashscript e do terminal? Como posso fazer com que a typesaída do script bash seja a mesma do terminal?

bash shell-script
  • 1 respostas
  • 128 Views
Martin Hope
Porcupine
Asked: 2020-02-28 05:28:47 +0800 CST

o valor do editor dconf é diferente de gsettings get value

  • 4

Eu fiz da seguinte forma:

$ gsettings get org.gnome.desktop.session idle-delay
uint32 300

$ gsettings set org.gnome.desktop.session idle-delay 80

$ gsettings get org.gnome.desktop.session idle-delay
uint32 80

Mas quando faço: dconf dump /org/gnome/, vejo o seguinte:

$ dconf dump /org/gnome/desktop/session
[/]
idle-delay=uint32 60

Observação : dconf dumpmostra o valor real, mas gsettingsmostra um novo valor, mas é diferente do mostrado pelo dconf-editor

Após reiniciar

$ dconf dump /org/gnome/desktop/session
[/]
idle-delay=uint32 60

$ gsettings get org.gnome.desktop.session idle-delay
uint32 300

Observação : dconf dumpmostra o valor real, mas gsettingsmostra o valor padrão


Isso significa que gsettingsnão estão funcionando no meu sistema? Se sim, como posso corrigir isso?

linux gnome
  • 1 respostas
  • 866 Views
Martin Hope
Porcupine
Asked: 2020-01-25 10:45:22 +0800 CST

Bash: Executar comando (com um padrão específico) somente se outro comando (com outro padrão específico) falhou

  • 0

Eu tenho um script de shell que cria uma função (em um arquivo bashscript que é originado por .bashrc) para cada arquivo Markdown para abri-lo no editor.

Exemplo:

ls /home/nikhil/Notes/Studies
Physics.md
Chemistry.md
Studies.md
index.md

ls /home/nikhil/Notes/Sports
Football.md
Cricket.md
index.md

Como você pode ver, algumas pastas (como Estudos) contêm um arquivo com o mesmo nome (Studies.md) e index.md, enquanto outras (como Sports) contêm index.md, mas não Sports.md

Agora, meu bashscript cria as seguintes funções

oPhysics(){ ${Editor:-vim} /home/nikhil/Notes/Studies/Physics.md }
oChemistry(){ ${Editor:-vim} /home/nikhil/Notes/Studies/Chemistry.md }
oStudies(){ ${Editor:-vim} /home/nikhil/Notes/Studies/Studies.md }
oiStudies(){ ${Editor:-vim} /home/nikhil/Notes/Studies/index.md }

oFootball(){ ${Editor:-vim} /home/nikhil/Notes/Sports/Football.md}
oCricket(){ ${Editor:-vim} /home/nikhil/Notes/Sports/Cricket.md}
oiSports(){ ${Editor:-vim} /home/nikhil/Notes/Sports/index.md}

Observe que: oStudiese oiStudiesexistem, enquanto apenas oiSportsexiste.

Inscrição

Agora, como usuário, gostaria de digitar oStudiesor oSports(isso falharia) e not oiSports, e ele deve ser executado automaticamente oiSportsquando oSportsa função não existir. Isso ocorre porque, na maioria das vezes, o usuário está interessado em abrir os arquivos normais de markdown, e somente quando eles não existem, o usuário gostaria de abrir os arquivos index.md. O usuário não lembra para qual pasta existe apenas index.md (por exemplo, pasta Sports).

Como posso fazer isso? O padrão que procuro é executar uma função oiBlahBlahcaso oBlahBlahnão exista, dado que oBlahBlahé invocada pelo usuário.


Respostas a sugestões

Fazer alias não funcionará, pois não quero oStudiesexecutaroiStudies

environment-variables bash
  • 2 respostas
  • 54 Views
Martin Hope
Porcupine
Asked: 2020-01-22 15:45:04 +0800 CST

Find exec sh: variável do shell não sendo passada para o subshell

  • 5

Aqui está um código simplificado que imprime o nome do diretório se ele contiver um nome de arquivo com o mesmo nome do diretório pai e da .mdextensão.

FIND(){
    find . -type d -exec sh -c '
        for d do
            [ -f "${d}/${d##*/}.md" ] && printf "%s\n" "$d"
        done' find-sh {} +
}


FIND

Para generalizar, quero enviar o termo de pesquisa ${d}/${d##*/}.mdcomo argumento para a FINDfunção, mas infelizmente isso não gera nada:

FIND(){
    local SearchTerm="${1}"
    find . -type d -exec sh -c '
        for d do
            [ -f "${SearchTerm}" ] && printf "%s\n" "$d"
        done' find-sh {} +
}

FIND '${d}/${d##*/}.md'

Tenho certeza de que há algum problema com a cotação do SearchTerm. Alguma dica?


Eu tentei: FIND '\${d}/\${d##*/}.md'mas não tem saída

bash quoting
  • 3 respostas
  • 701 Views
Martin Hope
Porcupine
Asked: 2019-11-18 13:39:22 +0800 CST

Variável de várias linhas adiciona uma guia antes de cada nova linha

  • 0

O trecho a seguir usa uma função personalizada HexNewLine que basicamente converte o hexdump e quebra no caractere 0x0a

$ echo -e "\t{
>   "dependencies": {
>     "prettier": {
>       "version": "1.18.2",
>       "from": "[email protected]",
>       "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz"
>     }
>   }
> }" | HexNewLine

00000000   09 7b 0a                                           '.{.'
0000000a   20 20 64 65 70 65 6e 64 65 6e 63 69 65 73 3a 20    '  dependencies: '
0000001a   7b 0a                                              '{.'
0000001c   20 20 20 20 70 72 65 74 74 69 65 72 3a 20 7b 0a    '    prettier: {.'
0000002c   20 20 20 20 20 20 76 65 72 73 69 6f 6e 3a 20 31    '      version: 1'
0000003c   2e 31 38 2e 32 2c 0a                               '.18.2,.'
00000043   20 20 20 20 20 20 66 72 6f 6d 3a 20 70 72 65 74    '      from: pret'
00000053   74 69 65 72 40 31 2e 31 38 2e 32 2c 0a             '[email protected],.'
00000060   20 20 20 20 20 20 72 65 73 6f 6c 76 65 64 3a 20    '      resolved: '
00000070   68 74 74 70 73 3a 2f 2f 72 65 67 69 73 74 72 79    'https://registry'
00000080   2e 6e 70 6d 6a 73 2e 6f 72 67 2f 70 72 65 74 74    '.npmjs.org/prett'
00000090   69 65 72 2f 2d 2f 70 72 65 74 74 69 65 72 2d 31    'ier/-/prettier-1'
000000a0   2e 31 38 2e 32 2e 74 67 7a 0a                      '.18.2.tgz.'
000000aa   20 20 20 20 7d 0a                                  '    }.'
000000b0   20 20 7d 0a                                        '  }.'
000000b4   7d 0a                                              '}.'
  • Agora estou usando trpara adicionar uma tabulação após o caractere de nova linha, mas nada acontece!
$ echo -e "\t{
>   "dependencies": {
>     "prettier": {
>       "version": "1.18.2",
>       "from": "[email protected]",
>       "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz"
>     }
>   }
> }" | tr '\n' '\n\t'
        {
  dependencies: {
    prettier: {
      version: 1.18.2,
      from: [email protected],
      resolved: https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz
    }
  }
}
bash
  • 1 respostas
  • 898 Views
Martin Hope
Porcupine
Asked: 2019-11-07 12:41:23 +0800 CST

Script Bash de origem, cada um com função principal

  • 1

Estou usando o Bash 4.4.20. Eu normalmente tenho a função main em cada bashscript. Se eu quiser originar este script de outra função dentro de outro script bash, isso entrará em conflito com a definição da função principal em ambos os scripts?

#A.sh
main() {
SomeFunction 
}

SomeFunction(){
. B.sh
}

main "$@"
#B.sh

main(){
echo Hi
}

main "$@"

Existe alguma solução sem renomear a função principal?

bash
  • 2 respostas
  • 6482 Views
Martin Hope
Porcupine
Asked: 2019-09-16 09:34:00 +0800 CST

Impedir que o argumento bashscript seja transferido para um script de origem filho

  • 0

Eu recebo um bashscript (Child) dentro de outro bashscript (Parent), em algum lugar no meio de Parent. O argumento passado para o Pai ao executá-lo é passado para o Filho. Como posso evitar esse comportamento? Não quero que os argumentos do pai sejam transferidos para o filho também.

NOTA : A analogia Pai Filho não é sobre o processo Pai Filho, mas sobre algo que vem antes do outro.

Além disso, eu queria ter o ambiente do Script pai (exceto os argumentos que são passados ​​para ele) para o script de origem. Isso ocorre porque os valores padrão de argumento para os scripts são diferentes. Veja Exemplo Abaixo. O script pai usa algumas das funções definidas no script de origem e também o script de origem cria matrizes que estão sendo usadas pelo script pai. Além disso, preciso dos parâmetros posicionais do script pai, após a origem do script filho.

#!/usr/bin/env bash
# - goal: "Parent"

main() {
    # # Path
    #dScriptP="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"

    # # Argument
    ParentArgument=${1:-40}
    echo "ParentArgument=${ParentArgument}"
    . Child.sh

}

main "$@"
#!/bin/false
# shellcheck shell=bash
# - goal: "Child"

main() {
    # # Path
    #dScriptP="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"

    # # Argument
    ChildArgument=${1:-30}
    echo "ChildArgument=${ChildArgument}"
}

main "$@"
$ ./Parent.sh 50
ParentArgument=50
ChildArgument=50

Saída Desejada

$ ./Parent.sh 50
ParentArgument=50
ChildArgument=30
bash
  • 2 respostas
  • 372 Views
Martin Hope
Porcupine
Asked: 2019-09-12 03:46:24 +0800 CST

Localizar: Substitui a expressão por uma variável

  • 0
$ find -name "Bik*"
./Biking
./Biking/Unsync/Biking.md.~6~
./Biking/Rendered/Biking.gen.html
./Biking/Biking.md

Agora, quando substituo a expressão por uma variável da seguinte forma:

$ a='-name "Bik*"'

$ find $a

Não recebo saída. Por que é tão? E o que deve ser modificado?

find
  • 1 respostas
  • 60 Views
Martin Hope
Porcupine
Asked: 2019-08-07 08:40:11 +0800 CST

Encontre apenas as pastas que contêm um arquivo com o mesmo nome da pasta

  • 7

Eu quero encontrar todas as subpastas, que contém um arquivo markdown com o mesmo nome (e extensão .md).

Por exemplo: Eu quero encontrar as seguintes subpastas:

Apple/Banana/Orange      #Apple/Banana/Orange/Orange.md exists
Apple/Banana             #Apple/Banana/Banana.md exists
Apple/Banana/Papaya      #Apple/Banana/Papaya/Papaya.md exists
  • Nota: Pode haver outros arquivos ou subdiretórios no diretório.

Alguma sugestão?


As soluções para o problema podem ser testadas usando o seguinte código:

#!/usr/bin/env bash
# - goal: "Test"
# - author: Nikhil Agarwal
# - date: Wednesday, August 07, 2019
# - status: P T' (P: Prototyping, T: Tested)
# - usage: ./Test.sh
# - include:
#   1.
# - refer:
#   1. [directory - Find only those folders that contain a File with the same name as the Folder - Unix & Linux Stack Exchange](https://unix.stackexchange.com/questions/534190/find-only-those-folders-that-contain-a-file-with-the-same-name-as-the-folder)
# - formatting:
#   shellcheck disable=
#clear

main() {
    TestData
    ExpectedOutput
    TestFunction "${1:?"Please enter a test number, as the first argument, to be executed!"}"
}

TestFunction() {
    echo "Test Function"
    echo "============="
    "Test${1}"
    echo ""
}

Test1() {
    echo "Description: Thor"
    find . -type f -regextype egrep -regex '.*/([^/]+)/\1\.md$' | sort
    echo "Observation: ${Green:=}Pass, but shows filepath instead of directory path${Normal:=}"
}

Test2() {
    echo "Description: Kusalananda1"
    find . -type d -exec sh -c '
    dirpath=$1
    set -- "$dirpath"/*.md
    [ -f "$dirpath/${dirpath##*/}.md" ] && [ "$#" -eq 1 ]' sh {} \; -print | sort
    echo "Observation: ${Red:=}Fails as it ignores B.md${Normal:=}"
}

Test3() {
    echo "Description: Kusalananda2"
    find . -type d -exec sh -c '
    for dirpath do
        set -- "$dirpath"/*.md
        if [ -f "$dirpath/${dirpath##*/}.md" ] && [ "$#" -eq 1 ]
        then
            printf "%s\n" "$dirpath"
        fi
    done' sh {} + | sort
    echo "Observation: ${Red:=}Fails as it ignores B.md${Normal:=}"
}

Test4() {
    echo "Description: steeldriver1"
    find . -type d -exec sh -c '[ -f "$1/${1##*/}.md" ]' find-sh {} \; -print | sort
    echo "Observation: ${Green:=}Pass${Normal:=}"
}

Test5() {
    echo "Description: steeldriver2"
    find . -type d -exec sh -c '
  for d do
    [ -f "$d/${d##*/}.md" ] && printf "%s\n" "$d"
  done' find-sh {} + | sort
    echo "Observation: ${Green:=}Pass${Normal:=}"
}

Test6() {
    echo "Description: Stéphane Chazelas"
    find . -name '*.md' -print0 \
        | gawk -v RS='\0' -F/ -v OFS=/ '
    {filename = $NF; NF--
     if ($(NF)".md" == filename) include[$0]
     else exclude[$0]
    }
    END {for (i in include) if (!(i in exclude)) print i}'
    echo "Observation: ${Red:=}Fails as it ignores B.md${Normal:=}"
}

Test7() {
    echo "Description: Zach"
    #shellcheck disable=2044
    for fd in $(find . -type d); do
        dir=${fd##*/}
        if [ -f "${fd}/${dir}.md" ]; then
            ls "${fd}/${dir}.md"
        fi
    done
    echo "Observation: ${Green:=}Pass but shows filepath instead of directory${Normal:=}"
}
ExpectedOutput() {
    echo "Expected Output"
    echo "==============="
    cat << EOT
./GeneratedTest/A
./GeneratedTest/A/AA
./GeneratedTest/B
./GeneratedTest/C/CC1
./GeneratedTest/C/CC2
EOT
}

TestData() {
    rm -rf GeneratedTest

    mkdir -p GeneratedTest/A/AA
    touch GeneratedTest/index.md
    touch GeneratedTest/A/A.md
    touch GeneratedTest/A/AA/AA.md

    mkdir -p GeneratedTest/B
    touch GeneratedTest/B/B.md
    touch GeneratedTest/B/index.md

    mkdir -p GeneratedTest/C/CC1
    touch GeneratedTest/C/index.md
    touch GeneratedTest/C/CC1/CC1.md

    mkdir -p GeneratedTest/C/CC2
    touch GeneratedTest/C/CC2/CC2.md

    mkdir -p GeneratedTest/C/CC3
    touch GeneratedTest/C/CC3/CC.md

    mkdir -p GeneratedTest/C/CC4
}
main "$@"
find directory
  • 6 respostas
  • 1141 Views
Martin Hope
Porcupine
Asked: 2019-07-22 04:07:38 +0800 CST

Passe um grupo de comandos bash para a função bash

  • 0

Eu quero passar o seguinte grupo de comandos bash

{ echo Apple; echo Banana; }

como um argumento para uma função bash definida da .bashrcseguinte forma:

BashFunction(){
"$@" | SomeOtherFunction
}
BashFunction '{ echo Apple; echo Banana; }'

Mas recebo este erro:

{ echo Apple; echo Banana; }: command not found

Se eu remover as aspas da função bash

BashFunction(){
$@ | SomeOtherFunction
}

Então eu recebo esse erro

{: command not found
bash pipe
  • 1 respostas
  • 163 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