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

John Smith's questions

Martin Hope
John Smith
Asked: 2024-12-25 19:38:02 +0800 CST

Como posso fazer com que esse script expect funcione consistentemente conforme o esperado?

  • 8

Eu uso uma carteira interativa spectre-clide Spectre , uma moeda similar à Kaspa em seu design. Quando eu quero manualmente obter o saldo da minha carteira, preciso executar spectre-clie então connect, open de dentro de spectre-cli. Tudo isso se parece com isto:

spectre-cli
Spectre Cli Wallet v0.3.16 (type 'help' for list of commands)
$ connect
Connected to Spectre node version 0.3.16 at ws://127.0.0.1:19110
$ open
Enter wallet password: 

Your wallet hint is: This is a hint.

$ $ 
• ****************
    • [********]: 4.47042578 SPR   1 UTXOs
      spectre:******************************************************

[********] • 4.47042578 SPR $ 

Eu escrevi um script expect para executar essas etapas para mim (para que a única coisa que eu precisasse digitar fosse minha senha):

#!/usr/bin/expect -f

# Set a timeout (in seconds) for how long to wait for each prompt
set timeout 5

spawn spectre-cli

expect "$ "   
send "connect\r"

expect "$ "  
send "open\r"


interact

Eu obtenho uma saída inconsistente do script. Cerca de 70% das vezes eu obtenho:

./get_balance_works.exp 
spawn spectre-cli
Spectre Cli Wallet v0.3.16 (type 'help' for list of commands)
$ connect
connectopen
command not found: connectopen
$ 

enquanto o resto do tempo o script funciona como esperado:

./get_balance_works.exp 
spawn spectre-cli
Spectre Cli Wallet v0.3.16 (type 'help' for list of commands)
$ connect
$ open
Connected to Spectre node version 0.3.16 at ws://127.0.0.1:19110
Enter wallet password: 

Your wallet hint is: This is a hint.

$ $ 
• ****************
    • [********]: 4.47042578 SPR   1 UTXOs
      spectre:******************************************************

[********] • 4.47042578 SPR $ 

Existe uma maneira de fazer o script funcionar conforme o esperado de maneira consistente?

PS: Estou usando um Ubuntu LTS.

scripting
  • 2 respostas
  • 58 Views
Martin Hope
John Smith
Asked: 2024-06-09 21:06:21 +0800 CST

Por que definir `umask` como `0077` (e depois baixar a chave pública) torna uma chave pública gpg indisponível para o apt?

  • 7

Por que a configuração umasktorna 0077uma chave pública gpg indisponível aptao instalar um pacote, por exemplo , .

umask 0077
curl -fsSLo /usr/share/keyrings/brave-browser-beta-archive-keyring.gpg https://brave-browser-apt-beta.s3.brave.com/brave-browser-beta-archive-keyring.gpg
  echo "deb [signed-by=/usr/share/keyrings/brave-browser-beta-archive-keyring.gpg] https://brave-browser-apt-beta.s3.brave.com/ stable main">/etc/apt/sources.list.d/brave-browser-beta.list
apt update
apt install brave-browser-beta
  

O procedimento acima não funciona, recebo esta saída:

Err:4 https://brave-browser-apt-beta.s3.brave.com stable InRelease    
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 0B31DBA06A8A26F9
Reading package lists... Done
W: GPG error: https://brave-browser-apt-beta.s3.brave.com stable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 0B31DBA06A8A26F9
E: The repository 'https://brave-browser-apt-beta.s3.brave.com stable InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.


Isso funciona:

umask 0022
curl -fsSLo /usr/share/keyrings/brave-browser-beta-archive-keyring.gpg https://brave-browser-apt-beta.s3.brave.com/brave-browser-beta-archive-keyring.gpg
  echo "deb [signed-by=/usr/share/keyrings/brave-browser-beta-archive-keyring.gpg] https://brave-browser-apt-beta.s3.brave.com/ stable main">/etc/apt/sources.list.d/brave-browser-beta.list
apt update
apt install brave-browser-beta

Por que configurar umask( 0077e depois baixar a chave pública) torna uma chave pública gpg indisponível para o apt? A chave foi baixada como roote executada apt update, por que então esse problema?

permissions
  • 1 respostas
  • 39 Views
Martin Hope
John Smith
Asked: 2024-02-18 18:35:01 +0800 CST

Por que obtenho um comportamento diferente do navegador ao tentar acessar bitcoin.stackexchange.com e o alias de seu IP em /etc/hosts?

  • 5

Não encontrei nenhum navegador que suporte aliases definidos, /etc/hostsmesmo quando termos únicos (sem precisar acrescentar no navegador http://) não são interpretados como termos de pesquisa para o mecanismo de pesquisa padrão (o caso de badwolf browser ). Aliases funcionam quando prefixados com http://, por exemplo, http://bsemas ter que digitar http://anula o propósito de usá-los.

A Cloudflare não permite acessar bitcoin.stackexchange.com por meio de um alias, definido como 172.64.144.30 bitcoin.stackexchange.com bse

Error 1003 Ray ID: 85750e9fc9b65e4d • 2024-02-18 08:56:29 UTC
Direct IP access not allowed
What happened?
You've requested an IP address that is part of the Cloudflare network. A valid Host header must be supplied to reach the desired website.

Quando tento acessar, bitcoin.stackexchange.comnão recebo nenhum erro do Cloudflare.

  1. Estou enviando um cabeçalho de host ao tentar acessar bitcoin.stackexchange.comde um PC de mesa com 172.64.144.30 bitcoin.stackexchange.com bseanexo /etc/hosts?

  2. Por que obtenho um comportamento diferente do navegador ao tentar acessar http://bsee bitcoin.stackexchange.comentrar no navegador?

  3. Há alguma configuração em navegadores como Brave, Firefox ( about:config?), Chromium que eu possa aplicar para usar meus aliases perfeitamente?

Além das /etc/hostsminhas consultas de DNS, as consultas são resolvidas pelo roteador doméstico, conforme mostrado pelo conteúdo do meu/etc/resolv.conf

# Generated by Connection Manager
search home 
nameserver 192.168.1.1

A pesquisa que fiz é man hosts. O objetivo hipotético de anexar 172.64.144.30 bitcoin.stackexchange.com bseé /etc/hostslimitar o número de determinadas consultas DNS (que podem fazer meu perfil parecer muito radical e, portanto, resultar em vigilância direcionada) ao servidor DNS do meu roteador. Estou ciente da possibilidade de pesquisas reversas de DNS, mas deixo isso fora do escopo da questão.

dns
  • 1 respostas
  • 53 Views
Martin Hope
John Smith
Asked: 2024-02-17 00:14:01 +0800 CST

Como verifico a conexão SSL/TLS com o openssl de forma não interativa (a partir de um script)?

  • 8

Quando eu executo:

openssl s_client -connect google.com:443
openssl s_client -connect government.ru:443

Isso me dá uma saída valiosa, mas eu gostaria opensslde fechar a conexão e sair retornando um código de saída inteiro (diferente em) para que eu pudesse fazer algo assim

echo "Domain?";read d
openssl s_client -connect "$d":443

if [[ "$?" -eq 0 ]]; then
  echo "Encrypted"; do_sth
else 
  echo "Plain."; do_sth_else
fi

openssl
  • 2 respostas
  • 70 Views
Martin Hope
John Smith
Asked: 2024-01-08 15:55:14 +0800 CST

Como faço para colocar unidades/partições na lista de permissões que podem ser montadas apenas naquelas que possuem entradas em/etc/fstab?

  • 11

No meu sistema Ubuntu, notei que alguns gerenciadores de arquivos, quando abertos, podem montar qualquer unidade que esteja conectada através de uma das minhas portas USB (como não-root). Na tentativa de evitar que isso acontecesse configurei /etc/fstabassim:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/vgubuntu-root /               ext4    errors=remount-ro 0       1
# /boot was on /dev/nvme0n1p3 during installation
UUID=485794d0-6773-4136-9df9-c8f97fc3c3bc /boot           ext4    defaults        0       2
# /boot/efi was on /dev/nvme0n1p2 during installation
UUID=5E62-20EC  /boot/efi       vfat    umask=0077      0       1
/dev/mapper/vgubuntu-swap_1 none            swap    sw              0       0
#/media/j/sandisk-32GB is my primary USB drive for backups
PARTUUID=d199a40a-b5cc-724b-b70b-1b90e4274ea9 /media/user_xyz/sandisk-32GB ext4 defaults,nofail 0 3

1. Como evito a montagem automática ou a montagem por outros rootusuários das unidades/partições que não estão especificadas em meu arquivo /etc/fstab?

2. É possível ir ainda mais longe e restringir roota montagem de unidades que não estejam na lista de permissões? Por exemplo, roottenta fazer mount PARTUUID=this-partition-is-not-whitelisted /media/user_xyz/not-whitelistede falha, a menos que alterem a configuração que estou tentando configurar.

PS O particular PARTUUIDé usado apenas para transmitir a ideia de onde quero chegar - estou ciente de que não está no formato adequado e que rootfalharia na montagem por causa disso. Estou no Ubuntu 22.04 LTS.

filesystems
  • 2 respostas
  • 282 Views
Martin Hope
John Smith
Asked: 2024-01-01 21:33:52 +0800 CST

Como uso um descritor de arquivo não padrão para ler um arquivo em uma matriz com mapfile?

  • 6

mapfile -t -u 7 arr < textfileme dá bash: mapfile: 7: invalid file descriptor: Bad file descriptor Outros métodos mais detalhados de leitura de arquivos linha por linha que permitem tal descritor, por exemplo

read_w_while() {
while IFS="" read -u 7 -r l || [[ -n "${l}" ]]; do
  echo "${l}"
done 7< textfile

O descritor padrão, 0, é bastante usado. O uso desse descritor torna o script mais seguro contra interferências? Minha experiência é que até agora só presenciei, sou usuário do Ubuntu Desktop, tamanha interferência ao usar while IFS="" read -u 7 ...com o descritor 7. Quais poderiam ser as razões de tal interferência.

bash
  • 2 respostas
  • 68 Views
Martin Hope
John Smith
Asked: 2023-12-09 19:26:16 +0800 CST

Como declaro e uso uma variável no crontab que conterá o nome da conta do usuário administrador?

  • 5

Quero que o crontab rootseja agnóstico, ou seja, não quero especificar literalmente nele que o usuário administrador é jim. É por isso que no meu crontab rootintroduzi a variável au.

SHELL=/bin/bash

PATH=/usr/bin:/bin:/usr/sbin:/sbin

au=$(echo "$(head -n 1 /etc/doas.conf)"|sed 's/permit//;s/as//;s/root//;s/ //g')

5 */4 * * * /home/"${au}"/sync-w-oumaima.sh
* * * * * echo "$au">"/home/${au}/${au}.log"

Infelizmente, não funciona - /home/jim/jim.lognão é criado pelo crontab. Como declaro e uso uma variável no crontab que conterá o nome da conta do usuário administrador?

bash
  • 2 respostas
  • 58 Views
Martin Hope
John Smith
Asked: 2023-12-09 04:38:07 +0800 CST

Opção -t do SSH - como executo remotamente um comando complexo que inclui pipes e expansão variável?

  • 5

O script a seguir é executado por roote tem como objetivo compartilhar dois diretórios do computador de Jim com o de Oumaima.

#!/usr/bin/bash

au=$(echo "$(head -n 1 /etc/doas.conf)"|sed 's/permit//;s/as//;s/root//;s/ //g') 

dirs=(
"/var/lib/transmission-daemon/downloads"
"/home/${au}/VisualArts/films_FR"
)



dst_ip="[fe80::cc08:9467:8dba:15a9%wlp4s0]"
her_host="fe80::cc08:9467:8dba:15a9%wlp4s0"

give_oumaima() {
for d in ${dirs[@]}; do 
  rsync -e "ssh -6 -i /home/${au}/.ssh/id_rsa" -av --delete --no-o --no-g --chown=oumaima:oumaima "${d}" "root@${dst_ip}:/home/oumaima/Desktop" &&
  ssh -i "/home/${au}/.ssh/id_rsa" -t -6 "root@${her_host}"  'echo -e "${d} synced, $(date)."|tee -a "/root/syncing-w-${au}.log"'
done
}

give_oumamima

O arquivo de log, /root/syncing-w-.logé criado no host remoto e seu conteúdo é:

 synced, Fri Dec  8 20:05:15 CET 2023.
 synced, Fri Dec  8 20:52:57 CET 2023.
 synced, Fri Dec  8 20:52:58 CET 2023.
 synced, Fri Dec  8 21:01:37 CET 2023.

As variáveis ​​como aue dnão se expandem para jim(o usuário administrador do meu PC) e o nome do diretório. Isso faz com que seja criado por muito tempo como /root/syncing-w-.logem vez de /root/syncing-w-jim.log. Além disso, o conteúdo do log não é específico em relação ao diretório que está sendo copiado pelo rsync. Parece que as aspas simples são as culpadas, mas como posso reescrever 'echo -e "${d} synced, $(date)."|tee -a "/root/syncing-w-${au}.log"'para que as variáveis ​​se expandam?

bash
  • 1 respostas
  • 40 Views
Martin Hope
John Smith
Asked: 2023-11-17 17:15:55 +0800 CST

Como defino e interpolo corretamente essa variável em meu comando find? [duplicado]

  • 5
Esta pergunta já tem respostas aqui :
Maneira correta de construir linha de argumento de comprimento variável para comando externo no bash (2 respostas)
Fechado há 3 dias .

Eu escrevi um script Bash mscript.shpara gerenciar meus arquivos de música, uma parte dele cria uma lista desses arquivos.

all_exts=" -iname \"*.webm\" -o -iname \"*.mkv\" "
#all_exts=' -iname "*.webm" -o -iname "*.mp3" -o -iname "*.mp4" -o -iname "*.mkv" ' 
#The line below works fine
#find "${HOME}/pCloudDrive/SocialSciences/Arabic/al_aghani" -maxdepth 1 -type f -size +1M \( -iname "*.webm" -o -iname "*.mp3" -o -iname "*.mp4" -o -iname "*.mkv" \)|\
find "${HOME}/pCloudDrive/SocialSciences/Arabic/al_aghani" -maxdepth 1 -type f -size +1M \( "$all_exts" \)|\
awk -v FS="/" '{print $8}' > "${HOME}/pCloudDrive/SocialSciences/Arabic/al_aghani/list"
#it does not work with single quotes either

Recebo a seguinte saída: find: paths must precede expression: -iname "*.webm" -o -iname "*.mkv" ' Quando executo o script sem tentar interpolar all_extspara meu comando find, o script funciona bem. Como posso expandir corretamente all_exts? PS Este script é simples apenas para isolar o problema. Eu realmente preciso interpolar all_extsno comando find porque tenho muitos comandos find fazendo esse trabalho em muitos diretórios diferentes.

bash
  • 1 respostas
  • 25 Views
Martin Hope
John Smith
Asked: 2023-11-08 18:30:26 +0800 CST

Por que gawk -d não cria awkvars.out no meu diretório de trabalho atual?

  • 5

gawk -dnão cria awkvars.outno meu diretório de trabalho atual. Por que? Em vez disso, recebo o seguinte stdout:

Usage: gawk [POSIX or GNU style options] -f progfile [--] file ...
Usage: gawk [POSIX or GNU style options] [--] 'program' file ...
POSIX options:      GNU long options: (standard)
    -f progfile     --file=progfile
    -F fs           --field-separator=fs
    -v var=val      --assign=var=val
Short options:      GNU long options: (extensions)
    -b          --characters-as-bytes
    -c          --traditional
    -C          --copyright
    -d[file]        --dump-variables[=file]
    -D[file]        --debug[=file]
    -e 'program-text'   --source='program-text'
    -E file         --exec=file
    -g          --gen-pot
    -h          --help
    -i includefile      --include=includefile
    -l library      --load=library
    -L[fatal|invalid|no-ext]    --lint[=fatal|invalid|no-ext]
    -M          --bignum
    -N          --use-lc-numeric
    -n          --non-decimal-data
    -o[file]        --pretty-print[=file]
    -O          --optimize
    -p[file]        --profile[=file]
    -P          --posix
    -r          --re-interval
    -s          --no-optimize
    -S          --sandbox
    -t          --lint-old
    -V          --version

To report bugs, see node `Bugs' in `gawk.info'
which is section `Reporting Problems and Bugs' in the
printed version.  This same information may be found at
https://www.gnu.org/software/gawk/manual/html_node/Bugs.html.
PLEASE do NOT try to report bugs by posting in comp.lang.awk,
or by using a web forum such as Stack Overflow.

gawk is a pattern scanning and processing language.
By default it reads standard input and writes standard output.

Examples:
    gawk '{ sum += $1 }; END { print sum }' file
    gawk -F: '{ print $1 }' /etc/passwd


awk
  • 1 respostas
  • 38 Views
Martin Hope
John Smith
Asked: 2023-10-12 16:18:59 +0800 CST

Por que este script está tratando os arquivos com os mesmos nomes dos mesmos arquivos?

  • 6
#!/usr/bin/bash

install_wm() {
    echo "$(dirname "$0")"
    cd "$(dirname "$0")" && pwd
    mkdir -p /root/.config && cd /root/.config &&
    git clone https://git.suckless.org/dwm && cd dwm && pwd &&
    diff "$(dirname "$0")/config.def.h" /root/.config/dwm
    cp -f "$(dirname "$0")/config.def.h" /root/.config/dwm &&
}

install_wm

Quando executo este script conforme rootrecebo

.
/home/jim/CS/SoftwareDevelopment/MySoftware/Bash/ubuntu-server-LTS
Cloning into 'dwm'...
remote: Enumerating objects: 6504, done.
remote: Counting objects: 100% (6504/6504), done.
remote: Compressing objects: 100% (3216/3216), done.
remote: Total 6504 (delta 3733), reused 5933 (delta 3287), pack-reused 0
Receiving objects: 100% (6504/6504), 6.18 MiB | 8.86 MiB/s, done.
Resolving deltas: 100% (3733/3733), done.
/root/.config/dwm
cp: './config.def.h' and '/root/.config/dwm/config.def.h' are the same file

Eu executo esse script como root. $(dirname "$0")/config.def.hé meu arquivo de configuração que tem conteúdo diferente e está localizado no mesmo diretório do script daquele no repositório clonado. Por que obtenho cp './config.def.h' and '/root/.config/dwm/config.def.h' are the same filese os arquivos têm apenas os mesmos nomes e não o conteúdo? Além disso, quando executo diffos dois arquivos manualmente, fora do script, recebo a saída que mostra a diferença entre eles:

22,23c22,23
< static const char *tags[] = { "Brave", "ffplay", "Geany", "Terminal", "5", "6", "7", "8" };
< //https://wiki.gentoo.org/wiki/Dwm#Assigning_applications_to_window_tags
---
> static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
> 
30,34c30,31
<   { "brave-browser", NULL,  NULL,       0,            1,           -1 },
<   { "ffplay",  NULL,       NULL,       1 << 1,       0,           -1 },
<   { "geany",  NULL,       NULL,       1 << 2,       0,           -1 },
<   { "lxterminal",  NULL,       NULL,       1 << 3,       0,           -1 },
<   { "gnome-screenshot",  NULL,NULL,     1 << 4,       1,           -1 },
---
>   { "Gimp",     NULL,       NULL,       0,            1,           -1 },
>   { "Firefox",  NULL,       NULL,       1 << 8,       0,           -1 },
61,63c58
< /* commands 
< https://youtu.be/wRh8HQ4ICwE
< */
---
> /* commands */
66,71c61
< static const char *termcmd[]  = { "lxterminal", NULL };
< static const char *downv[]  = { "amixer", "set", "Master", "3+", NULL };
< static const char *upv[]  = { "amixer", "set", "Master", "3-", NULL };
< static const char *mute[]  = { "amixer", "set", "Master", "toogle", NULL };
< 
< 
---
> static const char *termcmd[]  = { "st", NULL };

enquanto não recebo nenhuma saída quando diffé executado no meu script. O que esta acontecendo aqui?

bash
  • 1 respostas
  • 237 Views
Martin Hope
John Smith
Asked: 2023-10-09 04:39:45 +0800 CST

A interrupção do serviço Bluetooth também o desliga?

  • 5

Sendo outras coisas iguais, qual dos três computadores (depois de executar os respectivos comandos neles) consumiria mais energia? Qual a menor quantidade de energia?

1. bluetoothctl power off

2. bluetoothctl power off && doas systemctl stop bluetooth

3. doas systemctl stop bluetooth

A interrupção do serviço Bluetooth também o desliga?

terminal
  • 1 respostas
  • 30 Views
Martin Hope
John Smith
Asked: 2023-08-28 17:10:35 +0800 CST

Como seleciono uma matriz para percorrer a partir de uma matriz de matrizes?

  • 8
#!/usr/bin/bash


ARGENT=("Nous devons économiser de l'argent."
"Je dois économiser de l'argent.")

BIENETRE=("Comment vas-tu?" "Tout va bien ?")

aoarrs=("${ARGENT}" "${BIENETRE}")

select arr in "${aoarrs[@]}"; do
  for el in "${arr[@]}"; do
    echo "$el"
  done
  break
done 

Quero que este script imprima os nomes dos arrays para o usuário, ARGENTe BIENETRE, para que o usuário possa selecionar um deles. Após a entrada do usuário, o script deve imprimir todos os elementos de um array selecionado. Quero selecionar com selectuma matriz para percorrer a partir de uma matriz de matrizes ( aoarrs). A razão pela qual quero usar select é porque no mundo real meu array de arrays pode ter muito mais do que apenas dois arrays. Como posso conseguir isso?

bash
  • 4 respostas
  • 786 Views
Martin Hope
John Smith
Asked: 2023-08-22 16:20:17 +0800 CST

Como capturar de forma confiável a saída de 'ls' neste script?

  • 7

O script a seguir play_movie.shdestina-se a selecionar automaticamente um filme se houver apenas um no diretório atual e reproduzi-lo com ffplay. Caso contrário, destina-se a exibir uma seleção de filmes ao usuário e obter informações deles (o filme a ser reproduzido).

#!/usr/bin/bash

output_a=$(ls -R *.[aA][vV][iI] 2>/dev/null)
output_m=$(ls -R *.[mM][kKpP][vV4]] 2>/dev/null)
output_v=$(ls -R *.[vV][oO][bB]] 2>/dev/null)
all_exts="${output_a}${output_m}${output_v}"
ln_cnt=$(echo "${all_exts}" | wc -l)

if [[ "$ln_cnt" -eq 1 ]]; then
  echo -e "Playing: ${all_exts}\n"
  ffplay -hide_banner -infbuf -fs -sn -ast a:0 "${all_exts}"
elif [[ "$ln_cnt" -gt 1 ]]; then
  printf "Select a file out of the list below"
  ls -R *.[aA][vV][iI] 2>/dev/null 
  ls -R *.[mM][kKpP][vV4] 2>/dev/null 
  ls -R *.[vV][oO][bB] 2>/dev/null
  read line; ffplay -hide_banner -infbuf -fs -sn -ast a:0 "$line"
fi

O problema que tenho com este script:

  1. O script executa a primeira ramificação da ifinstrução mesmo se houver muitos filmes no diretório atual. Então eu entendo No such file or directory.
  2. Se houver apenas um filme para ser exibido, eu ganho No such file or directory.

Tive dificuldade em confiar na saída do lspassado. É possível corrigir esse script sem a necessidade de usar find?

ls
  • 2 respostas
  • 401 Views
Martin Hope
John Smith
Asked: 2023-08-10 16:01:23 +0800 CST

Por que eu poderia querer evitar tal forma de eco de usar `printf` ao imprimir para stdout? [duplicado]

  • 5
Esta pergunta já tem respostas aqui :
Existem consequências de segurança por não fornecer um formato de printf para usar? (2 respostas)
Fechado há 4 dias .

Escrevi o seguinte script ao tentar entender como printffunciona:

#!/usr/bin/bash

printf "Give me your three preferences.?
"
read p1
read p2
read p3
printf "%s\n" "${p1}" "${p2}" "${p3}"
printf "Just the same as this, \n"
printf "%s\n%s\n%s\n" "${p1}" "${p2}" "${p3}"
printf "I've found this way to be the easiest, ${p1}\n ${p2}\n ${p3}\n"

Por tentativa e erro, descobri que a terceira via funciona - embora não tenha sido especificado esse recurso de aprendizado . Eu uso printfdessa maneira com mais frequência porque é echosemelhante a -. Existem casos ou valores de variáveis ​​em que essa forma de imprimir valores stdoutnão funciona? Por que eu poderia querer evitar tal forma de uso printf?

bash
  • 2 respostas
  • 67 Views
Martin Hope
John Smith
Asked: 2023-04-12 16:21:12 +0800 CST

Como posso obter um script Bash de outro script Bash interativo?

  • 5

Eu tenho um script Bash interativo conozcoArrays.sh,

#!/usr/bin/bash

echo -e "\nGive me their phone number?\n"

read number

TOGOes=("$(find ~/chicas -maxdepth 1 -iname "*$number*" -type d -execdir echo {} + | sed "s;./;${HOME}/chicas/;g")" 
"$(find ~/chulos -maxdepth 1 -iname "*$number*" -type d -execdir echo {} + | sed "s;./;${HOME}/chulos/;g")"
"$(find ~/parejas -maxdepth 1 -iname "*$number*" -type d -execdir echo {} + | sed "s;./;${HOME}/parejas/;g")"
)

for togo in "${TOGOes[@]}"
do
  if [[ $togo != "" ]]; then
    echo $togo
    export togo && cd $togo && return 0
  else
    echo "Haven't found her in my directories." && cd ~/chicas
  fi
done

que realiza uma pesquisa em meus diretórios por uma palavra-chave e, se encontrar algo, muda para esse diretório. Por isso costumo lançá-lo sourcing, assim . ~/CS/SoftwareDevelopment/MySoftware/Bash/pasion/conozcoArrays.sh

Eu também tenho outro script Bash, todo.shque faz referência a 'conozcoArrays.sh':

#!/usr/bin/bash

ita='\e[3m'
end='\e[0m'

echo -e "1. La conozco?
2. Search through websites for a given phone number and create a dossier.
3. {ita}escort-scraper.py{end}"

read ch

if [[ "${ch}" == '1' ]]; then
  . ~/CS/SoftwareDevelopment/MySoftware/Bash/pasion/conozcoArrays.sh
elif [[ "${ch}" == '2' ]]; then
  "${HOME}/CS/SoftwareDevelopment/MySoftware/Python/escorts/search-no.py"
elif [[ "${ch}" == '3' ]]; then
  "${HOME}/CS/SoftwareDevelopment/MySoftware/Python/escorts/escort-scraper.py"
fi

O problema é que, quando entro, 1 conozcoArrays.sh não é avaliado, é iniciado, mas não parece ter origem - espero estar em um diretório diferente após a todo.shconclusão do script, mas não estou. Como posso obter conozcoArrays.shde outro script interativo?

bash
  • 1 respostas
  • 42 Views
Martin Hope
John Smith
Asked: 2023-02-26 23:11:55 +0800 CST

Por que esse script não é bem-sucedido no crontab como ocorre quando executado manualmente?

  • 7

Este script funciona quando executado comdoas ./backup_cron_root.sh

#!/usr/bin/bash

/usr/bin/crontab -l> "/tmp/cron.$(whoami).$(hostname)" && /bin/date>>"/tmp/cron.$(whoami).$(hostname)" &&
/usr/bin/doas -u joanna /usr/bin/cp -f "/tmp/cron.$(whoami).$(hostname)" "/home/joanna/pCloudDrive/backups" &&
/usr/bin/rm "/tmp/cron.$(whoami).$(hostname)"

onde ./backup_cron_root.shé o nome do script. Quando o mesmo script é agendado como um cronjob doas crontab -ee * * * * * /home/joanna/backup_cron_root.sh >/tmp/cronjob.log 2>&1 cria /tmp/cron.root.joanna-ONE-AMD-M4o que pertence a root , mas por algum motivo não consegue copiá-lo para /home/joanna/pCloudDrive/backups. Por quê então? Por que esse script não é bem-sucedido no crontab como ocorre quando executado manualmente?

O conteúdo do meu /etc/doas.confé

permit joanna as root
permit root as joanna

O seguinte é a minha cauda de grep CRON /var/log/syslog:


Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747796]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747797]: (root) CMD (/home/joanna/backup_cron_root.sh)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747792]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747791]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747794]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747793]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:22 joanna-ONE-AMD-M4 CRON[747795]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751555]: (root) CMD (/home/joanna/backup_cron_root.sh)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751551]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751550]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751553]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751552]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:22 joanna-ONE-AMD-M4 CRON[751554]: (CRON) info (No MTA installed, discarding output)

O conteúdo de /tmp/cronjob.logé

doas: Authentication failed
cron
  • 1 respostas
  • 95 Views
Martin Hope
John Smith
Asked: 2023-02-22 18:36:40 +0800 CST

Por que escapar das aspas duplas da execução do Python (com shell=True) é diferente do Bash?

  • 8

Eu preciso produzir arquivos de configuração JSON com echoe teechamados do meu script Python.

Por tentativa e erro, descobri que tenho que usar aspas simples. No entanto, não entendo todo o comportamento que encontrei ao usar o run(). O código a seguir imprime minhas perguntas:

#!/usr/bin/env python3

from subprocess import run

conf_file="""{
"alt-speed-down": 50,
}"""
print("Question 1. It does not work with double quotes. Why?")
run(f"""echo "{conf_file}" """, shell=True)
print("It works with single quotes.")
run(f"""echo '{conf_file}'""", shell=True)
conf_file="""{
\"alt-speed-down\": 50,
}"""
print("""Question 2. It does not work with double quotes, even when I escape the quotes.
Whereas when I type in my shell: 
echo "\"This is a quoted string.\"" 
it works. Why? 
""")
run(f"""echo "{conf_file}" """, shell=True)
print("""Question 3. It works with single quotes, even with escaped quotes. 
whearas when I type in my shell:
echo '\"this is quoted\"' 
I get the backslashes printed. Why aren't
the backslashes printed when called with Python's run()?""")
run(f"""echo '{conf_file}'""", shell=True)

Eu uso Bash como meu shell. Por que as aspas duplas são diferentes quando feitas no meu shell Bash em comparação com a execução do Python. Não estou acessando meu shell Bash especificando shell=Trueem run()?

PS Eu sei que gerar JSON com jsonmódulo é uma maneira de fazer isso, mas no meu caso é principalmente copiar JSON já existente de meus arquivos de configuração de backup. Quero evitar a leitura desses arquivos JSON em uma string em meu script - o script deve ser executado no sistema operacional recém-reinstalado, onde esses backups não estarão disponíveis inicialmente. É por isso que preciso ter muitas variáveis ​​de string em minha string Python que armazenam esses arquivos de configuração JSON

bash
  • 1 respostas
  • 181 Views
Martin Hope
John Smith
Asked: 2022-07-01 02:50:13 +0800 CST

Qual é a quantidade mínima de memória necessária para iniciar um processo em um sistema baseado em Linux?

  • 3

As rotinas em ambas as linguagens são baratas : as goroutines têm 2 KB cada, enquanto os processos Elixir têm 0,5 KB cada.

Entendo que para iniciar um processo no BEAM é necessário 0,5KB de memória. Por ser tão leve no caso de Elixir e Erlang, e em menor grau no caso de Go , parece ser a vantagem de usar esses tempos de execução quando comparados com outras linguagens que dependem de seus próprios processos e threads não tão baratos ou em os processos e threads do SO subjacente (que também supostamente requerem mais memória).

Eu quero saber quanta memória requer iniciar um processo em um sistema baseado em Linux. Estou ciente de que o uso de memória depende do que o processo está fazendo. Mas suponho que há um custo de memória de apenas iniciar um processo que não faz nada). Qual é esse custo?
Onde posso ler mais sobre isso? Existem arquivos / comandos com os quais posso inspecionar isso?

memory process
  • 1 respostas
  • 125 Views
Martin Hope
John Smith
Asked: 2022-05-28 03:50:11 +0800 CST

Como posso executar esse loop for aninhado em paralelo?

  • 0
#!/usr/bin/bash

TARGETS=(
"81.176.235.2"
"81.176.70.2" 
"78.41.109.7" 
)

myIPs=(
"185.164.100.1"
"185.164.100.2"
"185.164.100.3"
"185.164.100.4"
"185.164.100.5"
)

for t in "${TARGETS[@]}"
  do 
    for a in "${myIPs[@]}"
    do 
      echo "${a} ${t} -p 80" >>log 2>&1 &
      echo "${a} ${t} -p 443" >>log 2>&1 &
      wait
    done 
    
done

Eu quero que este código comece com comandos de eco para cada IP ao TARGETSexecutá-los em paralelo. Ao mesmo tempo, o script não deve prosseguir com comandos de eco para mais de um endereço myIPssimultaneamente, por isso introduzi waitno loop interno. Eu quero ter pares de echo(cada um para a porta 80e 443) executados em paralelo para cada destino no TARGETS. Em outras palavras, eu quero fazer isso (mas infelizmente não funciona):

for t in "${TARGETS[@]}"
do &
  for a in "${myIPs[@]}"
  do 
    echo "${a} ${t} -p 80" >>log 2>&1 &
    echo "${a} ${t} -p 443" >>log 2>&1 &
    wait
  done 

done
wait 

No entanto, porque aumentaria muito minhas médias de carga, não quero isso: :

for t in "${TARGETS[@]}"
do
  for a in "${myIPs[@]}"
  do 
    echo "${a} ${t} -p 80" >>log 2>&1 &
    echo "${a} ${t} -p 443" >>log 2>&1 &
  done 
done
wait 

Como posso atingir meu objetivo?

PS Este é apenas um trecho de um script mais complexo. Eu queria isolar o problema relevante, daí o uso de echoem vez de um dos comandos de rede.

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