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

Ahmad Ismail's questions

Martin Hope
Ahmad Ismail
Asked: 2025-04-23 07:34:46 +0800 CST

renomear diretórios recursivamente usando zmv

  • 7

Estou tentando renomear recursivamente todas as pastas _Oreilly(correspondência exata) para_OreillyFox

Em outras palavras, estou tentando ter o mesmo efeito que:

find . -depth -type d -name "_Oreilly" -execdir rename "s/_Oreilly/_OreillyFox/" {} \;

Usando zmv.

O comando que estou tentando é:

zmv -n '(**/)_Oreilly' '${1}_OreillyFox'

Tentei o comando acima com o nome do arquivo e ele os renomeia. Quero renomear apenas diretórios.

zsh
  • 2 respostas
  • 147 Views
Martin Hope
Ahmad Ismail
Asked: 2025-04-09 18:25:23 +0800 CST

Pare o cursor em aspas simples e duplas

  • 5

Eu tenho um zle como:

function _ctrl-shift-left() {
    ((REGION_ACTIVE)) || zle set-mark-command # Selection
    zle backward-word
}

zle -N _ctrl-shift-left
bindkey '^[[1;6D' _ctrl-shift-left # Ctrl+Shift+Left to select till the beginning of the previous word.

Por exemplo, para o comando abaixo

$ curl -s "https://samplesite.com/101146/07/data-processing/13/?#/101146-132519042909.html" | grep -oP 'https://dl\d*\.samplesite\.com/Files/[^"]+\.rar' | sed 's/\?nocache=[^&]*//g'

quando pressiono ctrl-shift-left, quero parar o cursor em 'e ".

Como posso fazer isso?

zsh
  • 2 respostas
  • 27 Views
Martin Hope
Ahmad Ismail
Asked: 2024-09-25 19:47:08 +0800 CST

Imprima o caractere antes e depois do cursor

  • 6

Preciso de uma função zle que imprima o caractere antes e depois do cursor.

print-char-before-after() {
    # Get the position of the cursor
    local cursor_pos=$CURSOR

    # Get the text in the current line
    local line_text=${BUFFER}
}

# Bind the function to a key combination (for example, Ctrl+P)
zle -N print-char-before-after
bindkey '^P' print-char-before-after

Considerando o pipe como o cursor, se a entrada for:

This is a inp|ut

A saída serápu

Ele precisa funcionar no início e no fim da linha e também no buffer multilinha.

se a entrada for:

|This is a input

A saída seráT

se a entrada for:

This is a input|

A saída serát

Como posso fazer isso?

ATUALIZAÇÃO 1:

O código que mais ou menos resolve meu problema é:

print-char-before-after() {
    # Get the characters from the left and right buffers
    local before_char=""
    local after_char=""

    # Check if the cursor is not at the beginning of the line
    if [[ -n "$LBUFFER" ]]; then
        before_char=${LBUFFER[-1]} # Last character of LBUFFER
    fi

    # Check if the cursor is not at the end of the line
    if [[ -n "$RBUFFER" ]]; then
        after_char=${RBUFFER[1]} # First character of RBUFFER
    fi

    # Print the characters before and after
    echo "${before_char}${after_char}"
}

# Bind the function to a key combination (for example, Ctrl+P)
zle -N print-char-before-after
bindkey '^P' print-char-before-after
zsh
  • 1 respostas
  • 43 Views
Martin Hope
Ahmad Ismail
Asked: 2024-04-30 08:10:06 +0800 CST

Pesquise recursivamente por arquivos txt que contenham todas as strings de pesquisa

  • 3

Quero encontrar todos os arquivos que contenham as palavras “Quem”, “O quê”, “Por que”, “Como”, “Quando”. Todas as palavras, em qualquer ordem. Insensível a maiúsculas e minúsculas

Tentei:

grep -rl --include='*.adoc' "Who" . | xargs grep -l "What" | xargs grep -l "Why" | xargs grep -l "How" | xargs grep -l "When"

Está dando erro do tipo:

grep: Walkthrough/datatable/extras/Scroller/media/data/2500.adoc: No such file or directory
command-line
  • 2 respostas
  • 71 Views
Martin Hope
Ahmad Ismail
Asked: 2023-09-12 00:00:44 +0800 CST

Execute o comando wget em cada linha de um arquivo e baixe os arquivos (dois de cada vez) [duplicado]

  • 5
Esta pergunta já tem respostas aqui :
Quatro tarefas em paralelo... como faço isso? (4 respostas)
Fechado há 2 dias .

Eu tenho um arquivo que contém URLs de arquivos para download.

Por exemplo:

https://url-of/file1.zip
https://url-of/file2.zip
https://url-of/file3.zip
...

O comando que estou usando atualmente para baixar arquivos é:

wget --continue --tries=0 https://url-of/file.zip

Mas agora preciso de um script bash que leia os URLs do arquivo e faça o download, dois de cada vez.

O script que criei até agora é:

#!/bin/sh

cat file.txt |while read url
do
    wget --continue --tries=0 "$url"
done

Mas baixa um único arquivo.

Como posso editá-lo para baixar dois arquivos por vez.

bash
  • 1 respostas
  • 48 Views
Martin Hope
Ahmad Ismail
Asked: 2023-07-16 15:05:32 +0800 CST

Renomeie os subdiretórios de um diretório chamado _QWE

  • 6

Posso executar um comando em todos os diretórios nomeados _QWEusando:

find . -name '_QWE' -type d -execdir touch {}/1234.txt \;

No entanto, preciso executar -execdir rename 's!^\./(\d+ -)\s(\d+\.)!$1!' {} \;em todos os subdiretórios imediatos de _QWEpara renomear os subdiretórios dos subdiretórios de _QWE.

Quero dizer, suponha que eu tenha uma estrutura de diretório como:

├── folder_1
│   └── _QWE
│       ├── Course 1
│       │   ├── 1 - Introduction
│       │   ├── 2 - 1. Basics of Course 1
│       │   ├── 3 - 2. Conclusion of Course 1
│       ├── Course 2
│       │   ├── 1 - Introduction
│       │   ├── 2 - 1. Basics of Course 2
│       │   ├── 3 - 2. Conclusion of Course 2
├── folder_2
│   └── folder_3
│      └── _QWE
│          ├── Course X1
│          │   ├── 1 - Introduction
│          │   ├── 2 - 1. Basics of Course X1
│          │   ├── 3 - 2. Conclusion of Course X1
│          ├── Course X2
│          │   ├── 1 - Introduction
│          │   ├── 2 - 1. Basics of Course X2
│          │   ├── 3 - 2. Conclusion of Course X2

Aqui eu quero renomear:

1 - Introduction
2 - 1. Basics of Course 1
3 - 2. Conclusion of Course 1
1 - Introduction
2 - 1. Basics of Course 2
3 - 2. Conclusion of Course 2
1 - Introduction
2 - 1. Basics of Course X1
3 - 2. Conclusion of Course X1
1 - Introduction
2 - 1. Basics of Course X2
3 - 2. Conclusion of Course X2

Aqui, por exemplo, 3 - 2. Conclusion of Course X2será renomeado para 3 - Conclusion of Course X2. Isto é o que 's!^\./(\d+ -)\s(\d+\.)!$1!'faz.

Só para ficar claro, 3 - 2. Conclusion of Course X2é um nome de diretório e não um nome de arquivo.

Como eu posso fazer isso?

Atualização 1:

Eu poderia obter os caminhos usando:

for dir in $(find . -name '_QWE' -type d)/*/ ; do echo $dir ; done

ou,

for dir in $(find . -name '_QWE' -type d)/*/ ; do (cd "$dir"; pwd); done

Mas,

for dir in $(find . -name '_QWE' -type d)/*/*/ ; do rename 's!^\./(\d+ -)\s(\d+\.)!$1!' $dir ; done

Não rendendo nenhuma saída.

bash
  • 1 respostas
  • 43 Views
Martin Hope
Ahmad Ismail
Asked: 2023-07-09 10:01:30 +0800 CST

Extrair dados que estão entre colchetes e separados por vírgula

  • 7

Eu tenho dados como:

['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom6/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom7/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom8/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom9/']

Eu quero cada valor sem aspas um por linha (para que eu possa canalizá-lo para outro comando) como:

/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/
/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/
....

awk -F'[][]' '{print $2}'remove os colchetes. Não estou entendendo como prosseguir.

awk
  • 2 respostas
  • 138 Views
Martin Hope
Ahmad Ismail
Asked: 2023-07-07 12:36:36 +0800 CST

systemd falhou ao desmontar durante o desligamento

  • 5

No começo, minha máquina estava dando a seguinte mensagem enquanto estava desligada.

Job usere1000.service/stop running (59s / no Limit): User job app-gnome-yandexx2ddisk-1908.scope/stop running (58s / no limit)...

Então eu defino KillUserProcesses=yesé /etc/systemd/logind.conf. Agora a máquina desliga primeiro, mas dá erro

Failed unmounting media-ismail-SSDWorking.mount - /media/ismail/SSDWorking.

Só para mencionar, minha Yandex.Disksincronização via daemon está localizada neste ssd (/media/ismail/SSDWorking) que estava dando mensagem anteriormente.

Talvez porque meu sistema não esteja matando o processo antes de desmontar (não tenho certeza).

Atualização 1:

Encontrei /run/systemd/generator/media-ismail-SSDWorking.mountcom o seguinte conteúdo:

# Automatically generated by systemd-fstab-generator

[Unit]
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
SourcePath=/etc/fstab
After=blockdev@dev-disk-by\x2dlabel-SSDWorking.target

[Mount]
What=/dev/disk/by-label/SSDWorking
Where=/media/ismail/SSDWorking
Options=nosuid,nodev,nofail,x-gvfs-show

Acho que se eu puder adicionar app-gnome-yandexx2ddisk-1908.scopevia After=para systemd-fstab-generator desmontar , isso pode resolver o problema.

Atualização 2:

$ systemd-umount /dev/sda1
$ journalctl -xe
 A stop job for unit media-ismail-SSDWorking.mount has begun execution.
░░
░░ The job identifier is 3897.
Jul 07 12:38:22 debian-i5 umount[10089]: umount: /media/ismail/SSDWorking: target is busy.
Jul 07 12:38:22 debian-i5 systemd[1]: media-ismail-SSDWorking.mount: Mount process exited, code=exited, status=32/n/a
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░
░░ An n/a= process belonging to unit media-ismail-SSDWorking.mount has exited.
░░
░░ The process' exit code is 'exited' and its exit status is 32.
Jul 07 12:38:22 debian-i5 systemd[1]: Failed unmounting media-ismail-SSDWorking.mount - /media/ismail/SSDWorking.
░░ Subject: A stop job for unit media-ismail-SSDWorking.mount has finished
░░
░░ The job identifier is 3897 and the job result is failed.

Atualização 3:

Se eu executar yandex-disk stop, então systemd-mount /dev/sda1, simplesmente desmonte. Portanto, o problema é que o sistema não para yandex-diskantes de tentar desmontar.

Atualização 4:

Eu executei o seguinte:

sudo tee /etc/systemd/system/run-before-shutdown.service << END
[Unit]
Description=Run my custom task at shutdown
Requires=network.target
DefaultDependencies=no
Before=reboot.target shutdown.target

[Service]
Type=oneshot
User=ismail
Group=ismail
ExecStart=/bin/true
ExecStop=/usr/bin/bash -c '/usr/bin/yandex-disk stop'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
END

sudo systemctl daemon-reload
sudo systemctl start run-before-shutdown.service
sudo systemctl enable run-before-shutdown.service

Ainda recebendo erro:

Failed unmounting media-ismail-SSDWorking.mount - /media/ismail/SSDWorking.
debian
  • 1 respostas
  • 36 Views
Martin Hope
Ahmad Ismail
Asked: 2023-07-06 14:10:36 +0800 CST

Como mudar para um xdg-desktop-portal diferente?

  • 8

Na minha máquina, tenho vários xdg-desktop-portal

$ ls -la /usr/share/xdg-desktop-portal/portals
.rw-r--r-- 100 root 23 Mar 14:48 gnome-keyring.portal
.rw-r--r--  99 root 20 Mar 02:25 gnome-shell.portal
.rw-r--r-- 548 root 18 Oct  2022 gnome.portal
.rw-r--r-- 495 root 29 Nov  2022 gtk.portal

Qual é o comando para mudar para um xdg-desktop-portal diferente?

debian
  • 1 respostas
  • 123 Views
Martin Hope
Ahmad Ismail
Asked: 2023-07-06 14:07:29 +0800 CST

Qual xdg-desktop-portal estou usando atualmente?

  • 8

Na minha máquina, tenho várias instâncias xdg-desktop-portal:

$ ls -la /usr/share/xdg-desktop-portal/portals
.rw-r--r-- 100 root 23 Mar 14:48 gnome-keyring.portal
.rw-r--r--  99 root 20 Mar 02:25 gnome-shell.portal
.rw-r--r-- 548 root 18 Oct  2022 gnome.portal
.rw-r--r-- 495 root 29 Nov  2022 gtk.portal

Estou tendo problemas para determinar qual deles está em uso no momento.

Que comando posso usar para descobrir qual xdg-desktop-portal estou usando?

debian
  • 2 respostas
  • 237 Views
Martin Hope
Ahmad Ismail
Asked: 2023-06-25 14:59:57 +0800 CST

Os pacotes selecionados devem usar o repositório `unstable`, o restante deles deve usar o repositório `stable`

  • 5

Eu adicionei duas fontes de pacote

deb https://deb.debian.org/debian bookworm main
deb https://deb.debian.org/debian unstable main

Eu quero instalar fzfe rofide unstable. Eu também quero que eles recebam atualizações de unstablequando eu corrosudo apt update && sudo apt upgrade.

Eu quero que todos os outros pacotes sejam usados bookworm​​para instalação e atualização.

Como eu posso fazer isso?

debian
  • 1 respostas
  • 18 Views
Martin Hope
Ahmad Ismail
Asked: 2023-06-25 14:52:49 +0800 CST

Onde preciso definir a variável $PATH para que o arquivo .desktop possa ver quando estou usando zsh como meu shell padrão

  • 5

Estou usando Debian 12. Gnome 43. zsh é meu shell padrão ( sudo chsh --shell /usr/bin/zsh ismail).

Em meu .zshrc, configurei a variável de caminho como:

export PATH="$HOME/.dotfiles/.cargo/bin:$PATH"

O binário alacritty está localizado em:

% which alacritty
/home/ismail/.dotfiles/.cargo/bin/alacritty

O seguinte arquivo da área de trabalho funciona:

[Desktop Entry]
Type=Application
Exec="/home/ismail/.dotfiles/.cargo/bin/alacritty"
Icon=Alacritty
Terminal=false
Categories=System;TerminalEmulator;

O seguinte arquivo da área de trabalho não funciona:

[Desktop Entry]
Type=Application
Exec=alacritty
Icon=Alacritty
Terminal=false
Categories=System;TerminalEmulator;

Não tenho ideia de por que isso não está funcionando.

Eu quero apontar uma coisa.

$ which foliate
/usr/bin/foliate

Se eu definir Exec=foliate, funcionará. Então, eu acho que tem algo a ver com o caminho. O sistema que executa .desktoparquivos provavelmente não está vendo a variável de caminho definida em .zshrc.

O que posso fazer neste momento.

Atualização 1:

Se eu usar o seguinte arquivo da área de trabalho:

[Desktop Entry]
Type=Application
Exec=gnome-terminal -e "zsh -c 'echo $PATH;$SHELL'"
Icon=Alacritty
Terminal=false
Categories=System;TerminalEmulator;

Name=Alacritty
GenericName=Terminal
Comment=A fast, cross-platform, OpenGL terminal emulator
StartupWMClass=Alacritty
Actions=New;

Então as variáveis ​​de caminho são:

/home/ismail/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin

% echo $SHELL        
/usr/bin/zsh

% echo $PATH 
/home/ismail/.dotfiles/.cargo/bin:/home/ismail/.local/bin:/home/ismail/bin:/home/ismail/.dotfiles/.resources/git-scripts:/home/ismail/.dotfiles/.resources/zsh-scripts:/home/ismail/.dotfiles/.resources/python-scripts:/home/ismail/.dotfiles/.resources/bash-scripts:/home/ismail/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin

Portanto, o arquivo da área de trabalho não está vendo a primeira parte ou a variável de caminho que defini posteriormente em .zshrc ( /home/ismail/.dotfiles/.cargo/bin:/home/ismail/.local/bin:/home/ismail/bin:/home/ismail/.dotfiles/.resources/git-scripts:/home/ismail/.dotfiles/.resources/zsh-scripts:/home/ismail/.dotfiles/.resources/python-scripts:/home/ismail/.dotfiles/.resources/bash-scripts:).

Onde preciso definir a variável $PATH para que o .desktoparquivo possa ver quando estou usando zsh como meu shell padrão.

debian
  • 2 respostas
  • 36 Views
Martin Hope
Ahmad Ismail
Asked: 2023-06-25 04:20:36 +0800 CST

Comportamento de `sudo apt upgrade` quando o pacote é instalado de uma fonte diferente

  • 5

Suponha que existam duas fontes de pacotes

deb https://deb.debian.org/debian bookworm main
deb https://deb.debian.org/debian unstable main

Em seguida, instale um pacote de instável usandosudo apt -t unstable install foo

Agora, quando eu executar, sudo apt update && sudo apt upgradeobterei fooa atualização de bookwormou unstable.

debian
  • 1 respostas
  • 16 Views
Martin Hope
Ahmad Ismail
Asked: 2023-06-24 06:49:51 +0800 CST

Renomeie várias pastas usando a ferramenta de manipulação de string externa

  • 5

Estou usando ccase .

O seguinte comando funciona.

$ mv camelCase (ccase -t Kebab camelCase)

Agora estou tentando renomear vários diretórios usando:

$ find . -type d -execdir rename 's/(.*)/$(ccase -t Kebab $1)/' '{}' \+

Isso não funciona, estou recebendo esta mensagem de erro:

Can't rename ./camelCase3 1000 4 24 27 30 46 121 132 1000ccase -t Kebab ./camelCase3): No such file or directory

O que posso fazer?

command-line
  • 3 respostas
  • 36 Views
Martin Hope
Ahmad Ismail
Asked: 2023-06-11 16:20:57 +0800 CST

Qual é a ligação de chave genérica que corresponde se nenhuma outra ligação fizer em zsh?

  • 6

Em fish shell , a ligação de chave genérica que corresponde, se nenhuma outra ligação corresponder, pode ser definida especificando uma SEQUÊNCIA da string vazia (ou seja, '' ).

Por exemplo:

bind '' self-insert

Eu verifiquei a documentação do zsh para funcionalidade semelhante, diz:

-m

Adicione o conjunto integrado de ligações de meta-chave ao mapa de teclado selecionado. Somente as chaves não vinculadas ou vinculadas à inserção automática são afetadas.

Não tenho certeza se posso usá-lo para o meu propósito.

Qual é a ligação de chave genérica que corresponde se nenhuma outra ligação fizer em zsh?

zsh
  • 1 respostas
  • 26 Views
Martin Hope
Ahmad Ismail
Asked: 2023-06-05 12:05:32 +0800 CST

Como verificar se uma string terminou com uma sequência de escape (\n)

  • 10

Eu tenho uma variável xcom nova linha à direita.

printf -v x 'hello\n'

Como descobrir se o último caractere de xé \n?

bash
  • 2 respostas
  • 1036 Views
Martin Hope
Ahmad Ismail
Asked: 2023-06-01 18:25:40 +0800 CST

Como selecionar todo o buffer usando o widget zle?

  • 7

Eu tenho um widget zle como:

_ctrl-a() {
  CURSOR=0
  if ((MARK == 0)); then
    zle set-mark-command
  fi

  if [ "$BUFFERLINES" -gt 1 ]; then
    zle end-of-buffer-or-history
  else
    zle end-of-line
  fi
}

zle -N _ctrl-a
bindkey '^A' _ctrl-a # Ctrl+A

Ele seleciona todo o buffer. Quero dizer, coloque o cursor no início do buffer, comece a marcar e coloque o cursor no final do buffer.

Aqui, o widget que estou usando para o comando de várias linhas é end-of-buffer-or-history, no entanto, eu quero que seja end-of-buffer.

Então, eu quero substituir:

if [ "$BUFFERLINES" -gt 1 ]; then
  zle end-of-buffer-or-history
else
  zle end-of-line
fi

com

zle end-of-buffer

Mas parece não haver widget para arquivos end-of-buffer.

O que posso fazer?

PS Seria uma boa experiência de aprendizado se eu pudesse selecionar todo o buffer usando MARKvariável.

zsh
  • 1 respostas
  • 31 Views
Martin Hope
Ahmad Ismail
Asked: 2023-06-01 10:34:44 +0800 CST

Como posso encontrar o código-fonte dos widgets zsh integrados (zle)?

  • 6

Onde os widgets zle integrados são armazenados? Estou tentando encontrar o código para beginning-of-buffer-or-historye beginning-of-line. zle -ala saída mostra que eles existem na minha máquina.

Eu corri:

% echo $widgets[beginning-of-buffer-or-history]
user:_zsh_autosuggest_bound_1_beginning-of-buffer-or-history
% echo $widgets[beginning-of-line]
user:_zsh_autosuggest_bound_1_beginning-of-line

Não foi possível descobrir onde os widgets estão localizados.

zsh
  • 1 respostas
  • 31 Views
Martin Hope
Ahmad Ismail
Asked: 2023-05-29 18:48:42 +0800 CST

Mostrar toda a saída somente quando um processo estiver concluído

  • 8

Aqui está o meu roteiro:

#! /bin/bash

ret=0
file_out1=$(mktemp)
file_out2=$(mktemp)

(echo first start; sleep 2s; echo first finish;) &> $file_out1 &
ret=$?
P1=$!
(echo second start; sleep 1s; echo second finish;) &> $file_out2 &
ret=$?
P2=$!

wait $P1 $P2 || ret=$?

cat $file_out1
cat $file_out2

exit $ret

Aqui, a saída é:

first start
first finish
second start
second finish

Mas a saída deve ser:

second start
second finish
first start
first finish

O que quero dizer é, cat $file_out1deve ser executado assim que P1for concluído e cat $file_out2deve ser executado assim que P2for concluído.

Além disso, quero ter certeza de que P1 terminou com sucesso e P2 terminou com sucesso. No final, como posso saber se houve um erro em P1ou P2ou ambos.

Neste script, $retnão está funcionando corretamente (é sempre exit 0). Depois que funcionar, seria bom saber se era $retde P1ou P2. Diga algo como P1código de retorno x1, P2código de retorno x2. E saia do programa com um código de retorno diferente de zero se houver um código de saída diferente de zero.

Atualização1:

Uma resposta em askubuntu , sugere que podemos usar --groupo argumento do comando paralelo para garantir que a saída de cada comando aguarde até que o comando seja concluído (evita saída mista).

O comando que mostrou é parallel --group 'echo -n {};sleep {};echo {}' ::: 1 3 2 4.

Este comando funciona na minha máquina. No entanto, não estou entendendo como usar esse comando no meu contexto.

Quero dizer, como posso obter

second start
second finish
first start
first finish

Quando os comandos de entrada são echo first start; sleep 2s; echo first finish;e echo second start; sleep 1s; echo second finish;usando gnu parallel.

Atualização 2:

O código em que estou atualmente é:

#! /bin/bash

function first {
    echo first start
    sleep 2s
    echo first finish
}
function second {
    echo second start
    sleep 1s
    echo second finish
}

export -f first && export -f second

parallel -j2 ::: first second

Isso realmente resolve meu problema.

bash
  • 1 respostas
  • 64 Views
Martin Hope
Ahmad Ismail
Asked: 2023-05-28 21:11:37 +0800 CST

Executar se as condições em paralelo

  • 5

Eu tenho um script como:

#!/bin/bash

if findmnt --source UUID=309689b5-ea5c-4175-84c7-192631553eab --source PARTLABEL=WDPurple8TB --mountpoint /media/ismail/WDPurple8TB --types ext4 --noheadings; then
    udisksctl unmount -b /dev/disk/by-label/WDPurple8TB
    udisksctl power-off -b /dev/disk/by-label/WDPurple8TB
    echo "Power-Off /dev/disk/by-label/WDPurple8TB"
fi

if findmnt --source UUID=151cf7f0-461a-416f-8e44-63d799418958 --source PARTLABEL=WDPurple6TB --mountpoint /media/ismail/WDPurple6TB --types ext4 --noheadings; then
    udisksctl unmount -b /dev/disk/by-label/WDPurple6TB
    udisksctl power-off -b /dev/disk/by-label/WDPurple6TB
    echo "Power-Off /dev/disk/by-label/WDPurple6TB"
fi

Aqui, seria melhor se ambos os blocos de código if-fi fossem executados em paralelo. No entanto, o stdout & stderr dentro do bloco de código if-fi deve vir em grupo (quero dizer que a saída deles não deve se sobrepor). O que eu quero dizer é:

o stdout & stderr das três linhas seguintes deve aparecer depois de atingirmos o final do primeiro bloco de código if-fi.

udisksctl unmount -b /dev/disk/by-label/WDPurple8TB
udisksctl power-off -b /dev/disk/by-label/WDPurple8TB
echo "Power-Off /dev/disk/by-label/WDPurple8TB"

o stdout & stderr das três linhas a seguir deve aparecer depois de atingirmos o final do segundo bloco de código if-fi.

udisksctl unmount -b /dev/disk/by-label/WDPurple6TB
udisksctl power-off -b /dev/disk/by-label/WDPurple6TB
echo "Power-Off /dev/disk/by-label/WDPurple6TB"

Como posso conseguir isso?

bash
  • 2 respostas
  • 54 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