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

jsx97's questions

Martin Hope
jsx97
Asked: 2025-04-15 04:03:18 +0800 CST

Por que meus nomes de arquivo UTF-8 sempre correspondem a uma expressão de colchetes regex em Perl?

  • 9

Aqui está um script para corrigir nomes de arquivos cirílicos quebrados se os arquivos foram movidos do Windows para o Mac (com base em uma resposta para Reverter nomes de arquivos depois que eles foram corrompidos pelo uso de codificação diferente )

#!/bin/zsh

# Usage: <script> <target directory>
# Requires Perl::Rename

find "$1" -mindepth 1 -print0 |
  rename -0 -d -e '
    use Unicode::Normalize qw(NFC);
    use Encode qw(:all);

    if ($_ =~ /[†°Ґ£§•¶І®©™Ђђ≠]/) {
      my $check = DIE_ON_ERR | LEAVE_SRC;
      my $new = eval {encode("UTF-8",
                      decode("cp866",
                      encode("mac-cyrillic",
                      NFC(decode("UTF-8", $_, $check)), $check), $check))
                     };
      if ($new) {$_ = $new;} else {warn $@;}
    }'

Quero que ele renomeie apenas os arquivos no diretório de destino que tenham pelo menos um dos seguintes caracteres em seus nomes: †°Ґ£§•¶І®©™Ђђ≠. Mas, por algum motivo, o script renomeia todos os arquivos ali: por exemplo, um nome de arquivo correto срочно.txté alterado para um ёЁюўэю.txt. O que estou fazendo errado?

O caminho para minha pasta de teste é simples /Users/john/scripts/test: sem espaços, sem caracteres cirílicos ou especiais.

O script é usado no macOS e com a versão BSD do find.

Uma atualização dois dias após a resposta à pergunta: as versões Chazelas e Choroba do Stéphane funcionam bem para mim. A versão do Terdon ainda não funciona.

perl
  • 4 respostas
  • 1238 Views
Martin Hope
jsx97
Asked: 2025-04-07 23:19:50 +0800 CST

Ocultar mensagem "Bem-vindo ao nano"

  • 5

Essa pode ser uma pergunta bem boba, mas eu tentei muito e não consegui descobrir sozinha.

GNU nano 8.4. Quando inicio, aparece uma mensagem de boas-vindas:

Bem-vindo ao nano. Para ajuda básica, digite Ctrl+G.

Como ocultá-lo permanentemente? Tentei iniciar o nano usando nano -x, mas isso oculta toda a barra de ferramentas, enquanto eu quero ocultar apenas a mensagem de boas-vindas.

nano
  • 2 respostas
  • 50 Views
Martin Hope
jsx97
Asked: 2025-03-31 00:27:31 +0800 CST

Diferença prática entre $0 e $0:P

  • 3

Quando executo o seguinte script no zsh, ambos $0e $0:Pme dão a mesma saída: /Users/john/scripts/test123.sh.

#!/bin/zsh
echo script\'s path:         $0
echo absolute path:          $0:P
echo parent folder:          $0:h
echo filename:               $0:t
echo filename w/o extension: $0:t:r
echo extension:              $0:t:e

Mas por que isso? Não é que, como :Pforça o caminho absoluto ( de acordo com a documentação do zsh ), se :Pnão for usado, o caminho deve ser relativo, por exemplo ~/scripts/test123.sh?

Para executar o script, primeiro eu o torno executável: chmod a+rx test123.she então clico duas vezes nele ou uso a linha de comando. O sistema operacional é macOS.

zsh
  • 1 respostas
  • 49 Views
Martin Hope
jsx97
Asked: 2025-03-23 21:17:01 +0800 CST

O arquivo foi alterado, mas sua "data de modificação" é a mesma. Como isso é possível?

  • 10

Aqui está um arquivo de teste test.applescript:

display dialog "foo" buttons {"OK"} cancel button 1 default button 1

Às 16h05 eu compilei para test.app:

osacompile -o test.app test.applescript

Às 4:07 PM eu editei test.applescriptsubstituindo foopor bar, e então compilei novamente, sobrescrevendo o test.apparquivo existente. (Ele foi sobrescrito com sucesso. Se eu executá-lo, a caixa de diálogo me mostra "bar", não "foo".)

display dialog "bar" buttons {"OK"} cancel button 1 default button 1
osacompile -o test.app test.applescript

Mas, mesmo assim, o date modifiedvalor de test.appainda é 4:05 PM. Por que isso? Como isso é possível?

Saída de stat -x:

  File: "test.app"
  Size: 96           FileType: Directory
  Mode: (0755/drwxr-xr-x)         Uid: (  501/    john)  Gid: (   20/   staff)
Device: 1,17   Inode: 79429067    Links: 3
Access: Sun Mar 23 16:05:52 2025
Modify: Sun Mar 23 16:05:52 2025
Change: Sun Mar 23 17:20:48 2025
 Birth: Sun Mar 23 16:05:52 2025
macos
  • 1 respostas
  • 1263 Views
Martin Hope
jsx97
Asked: 2025-03-20 22:59:54 +0800 CST

Onde armazenar um arquivo com instruções abbr originadas de config.fish?

  • 4

Eu tenho peixes iniciados a partir do zsh. No meu config.fishhá uma linha

source ~/.config/fish/easy-tor.fish

easy-tor.fishé simplesmente um conjunto de abbrinstruções para ativar e desativar rapidamente o proxy Tor e SOCKS5 da linha de comando.

Qual é o lugar correto para armazenar este arquivo? O fish fornece um conselho oficial sobre onde armazenar arquivos que não contêm funções?

macos
  • 1 respostas
  • 22 Views
Martin Hope
jsx97
Asked: 2025-03-17 01:11:30 +0800 CST

Tornar o script executável: chmod +x vs. a+x vs. a+rx

  • 5

Para tornar um script de shell executável, parece haver três opções:

  • Opção 1:chmod +x script.sh
  • Opção 2:chmod a+x script.sh
  • Opção 3:chmod a+rx script.sh

Aqui estão duas perguntas.

Q1. O que realmente significa que a primeira e a segunda opções concedem permissão para executar, mas não concedem permissão para ler? Como isso é possível na vida real?

Q2. Qual dessas opções é recomendada para um caso geral? Ou, para tornar essa pergunta menos pessoal, quais são os prós e os contras de cada opção?

permissions
  • 2 respostas
  • 52 Views
Martin Hope
jsx97
Asked: 2025-03-16 21:02:55 +0800 CST

Variáveis ​​em arquivos de configuração zsh

  • 4

Digamos que sua configuração zsh inclui as seguintes linhas para Perl:

PATH="/path/to/your/home/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="/path/to/your/home/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/path/to/your/home/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/path/to/your/home/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/path/to/your/home/perl5"; export PERL_MM_OPT;

Os arquivos de configuração do zsh não são scripts, então não é possível, se entendi corretamente, usar variáveis ​​regulares do estilo bash neles.

Mas talvez seja possível, de alguma forma, ter uma variável para a /path/to/your/home/perl5/parte, de modo que seja mais fácil alterá-la para todas as cinco linhas?

zsh
  • 1 respostas
  • 35 Views
Martin Hope
jsx97
Asked: 2025-03-16 08:53:41 +0800 CST

Perl: O módulo está instalado, mas não funciona

  • 5

Lembro que instalei o Perl::Rename usando cpan -i File::Rename, e de fato tenho os executáveis $HOME/perl5/bin​​with renamee unsafe-renamelá.

Mas quando tento usar rename,

# Expected: Renames FooBar.txt to Foo_Bar.txt
# It worked for me in the past
rename 's/\s/_/' *.txt

...há um erro:

Can't locate File/Rename.pm in @INC (you may need to install the File::Rename module) (@INC contains: /Library/Perl/5.34/darwin-thread-multi-2level /Library/Perl/5.34 /Network/Library/Perl/5.34/darwin-thread-multi-2level /Network/Library/Perl/5.34 /Library/Perl/Updates/5.34.1 /System/Library/Perl/5.34/darwin-thread-multi-2level /System/Library/Perl/5.34 /System/Library/Perl/Extras/5.34/darwin-thread-multi-2level /System/Library/Perl/Extras/5.34) at ./rename line 4.
BEGIN failed--compilation aborted at ./rename line 4.

Então tentei reinstalar File::Rename, usando o mesmo comando, mas então aparece outra mensagem de erro, uma bem longa. Aqui está uma parte do finalzinho:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR: Can't create '/Library/Perl/5.34/File'
mkdir /Library/Perl/5.34/File: Permission denied at /System/Library/Perl/5.34/ExtUtils/Install.pm line 470.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 at -e line 1.
make: *** [pure_site_install] Error 13
  RMBARKER/File-Rename-2.02.tar.gz
  /usr/bin/make install  -- NOT OK

O que está acontecendo aqui?

O Perl em si é o que vem com o macOS. Eu não o instalei.

perl
  • 1 respostas
  • 51 Views
Martin Hope
jsx97
Asked: 2025-03-14 23:58:59 +0800 CST

Reverter nomes de arquivos depois que eles foram distorcidos usando codificação diferente

  • 11

Eu tenho um arquivo

СМП бваг™вга†

As três primeiras letras são cirílicas e a parte restante é mojibake .

" Mojibake é um texto distorcido ou incompreensível que é o resultado de um texto decodificado usando uma codificação de caracteres não intencional." — Wikipédia

Originalmente, era

СМП структура

mas então ficou confuso de alguma forma, provavelmente porque o arquivo foi compactado no Windows XP e depois descompactado em um Mac, por um usuário inexperiente.

Tentei consertar usando convmvand iconv, assim:

convmv -r -f cp1251 -t utf-8 DIR
ls | iconv -f cp1251 -t cp850 | iconv -f cp866

mas ainda não obtive sucesso. Alguém pode ajudar com isso?

atualização 1

Hexdump de СМП бваг™вга†:

0000000    d0  a1  d0  9c  d0  9f  20  d0  b1  d0  b2  d0  b0  d0  b3  e2
           С   **  М   **  П   **      б   **  в  **   а  **   г   **  ™
0000020    84  a2  d0  b2  d0  b3  d0  b0  e2  80  a0  0a                
           **  **  в  **   г  **   а   **  †   **  **  \n                
0000034

Hexdump de СМП структура:

0000000    d0  a1  d0  9c  d0  9f  20  d1  81  d1  82  d1  80  d1  83  d0
           С   **  М   **  П   **      с  **   т  **   р  **   у  **   к
0000020    ba  d1  82  d1  83  d1  80  d0  b0  0a                        
           **  т   **  у   **  р   **  а   **  \n                        
0000032
filenames
  • 1 respostas
  • 264 Views
Martin Hope
jsx97
Asked: 2025-03-12 15:56:54 +0800 CST

Os dotfiles exigem o ponto inicial?

  • 5

Existe alguma diferença entre um "arquivo dot" e um "arquivo de configuração"?

Por exemplo, eu tenho torrcum arquivo em /opt/homebrew/etc/tor. Nem o nome do arquivo em si nem nenhum dos seus diretórios pais começam com um ponto. No entanto, esse arquivo é o mesmo que .vimrco do Vim. É correto chamá-lo de arquivo dot?

configuration
  • 2 respostas
  • 81 Views
Martin Hope
jsx97
Asked: 2025-03-11 02:01:53 +0800 CST

bash shebang no macOS

  • 7

No macOS, #!/bin/bashisso significa que um script usará o bash do sistema, que é muito antigo (3.2, ano de 2006) e (para mim, pelo menos) praticamente inútil.

Então você pode instalar o bash moderno usando Homebrew ou MacPorts, e usar algo assim:

#!/usr/bin/env bash

Mas a envabordagem não é confiável: e se você executar esse script em um Mac onde apenas o bash do sistema está instalado? Então, envusará o bash 3.2 em vez disso (eu suponho...), e isso fará com que o script se comporte mal e, portanto, pode causar danos.

Então, a terceira abordagem é

#!/opt/homebrew/bin/bash

Mas e se você executar esse script em um Mac onde o bash moderno é instalado usando MacPorts em vez do Homebrew?

Qual é a melhor prática aqui? (Talvez criar um link simbólico /usr/local/binque aponte para /opt/homebrew/bin/bash, e depois #!/usr/local/bin?)

bash
  • 2 respostas
  • 955 Views
Martin Hope
jsx97
Asked: 2025-03-07 03:00:19 +0800 CST

'qual' vs. 'tipo -a'

  • 7

Há um artigo de 2022 escrito por um cara que é um desenvolvedor sênior, e lá ele tem o seguinte alias em sua configuração zsh:

alias which='type -a'

Mas o zsh tem whichpor padrão, e se usarmos assim which, which cpa saída será

/bin/cp

Enquanto a saída de type -a cpé

cp is /bin/cp

A diferença é muito sutil para fazer um alias. Então, qual pode ser a diferença prática que eu negligenciei?

zsh
  • 1 respostas
  • 150 Views
Martin Hope
jsx97
Asked: 2025-03-05 21:20:18 +0800 CST

Remover determinado caminho de $PATH

  • 6

Para adicionar algo ao $PATH em fish, eu uso

fish_add_path -a ~/foo/bar

Então o peixe acrescenta ~/foo/barao meu ~/.config/fish/fish_variables:

SETUVAR fish_user_paths:/Users/john/foo/bar

Então, é correto dizer que para remover /Users/john/foo/barde $PATH, tenho duas opções:

  • para editar o fish_variablesarquivo

  • para usar a seguinte função:

    // https://github.com/fish-shell/fish-shell/issues/8604#issuecomment-1169638533
    function remove_path
      if set -l index (contains -i "$argv" $fish_user_paths)
        set -e fish_user_paths[$index]
        echo "Removed $argv from the path"
      end
    end
    

E a segunda parte da pergunta: Como usar corretamente essa função? Eu salvei como remove_from_path.fish, executei como remove_from_path.fish "/Users/john/foo/bar", mas ela não parece remover /Users/john/foo/barde $PATH. O que estou fazendo errado?

macos
  • 1 respostas
  • 42 Views
Martin Hope
jsx97
Asked: 2025-03-05 15:58:48 +0800 CST

Qual é a diferença entre "set -g" e "set" no fish shell?

  • 7

Estou tentando entender como o setcomando funciona no fish shell .

Por exemplo, para remover a mensagem de saudação, o manual do peixe sugere :

Para esvaziar o texto, com a função de saudação padrão:

set -U fish_greeting

ou set -g fish_greetingem config.fish.

Mas por que é sugerido usar set -g fish_greetingin config.fishem vez de just set fish_greeting? Qual é o propósito prático de -gaqui?

fish
  • 1 respostas
  • 279 Views
Martin Hope
jsx97
Asked: 2025-03-02 03:11:52 +0800 CST

alias zsh causa erro se usado em fish

  • 4

Tenho os seguintes aliases no meu zsh:

alias -- -='cd -'
alias ..='cd ..'
alias ...='cd ../..'

Quando alterno para peixe, digitando manualmente fishe pressionando Return, o primeiro alias causa um erro:

- (line 1): function: -: invalid function name
function -  --description 'alias -=cd -';  cd - $argv

Como contornar isso?

zsh
  • 1 respostas
  • 36 Views
Martin Hope
jsx97
Asked: 2025-03-01 04:57:24 +0800 CST

Quando o shell sai: Feche a janela vs. Não feche a janela

  • 4

Terminal > Configurações > Perfis > Shell > Quando o shell sai , opções:

  • Fechar a janela
  • Feche se o shell saiu claramente
  • Não feche a janela

insira a descrição da imagem aqui

Minha pergunta: Qual é o propósito prático da opção Não fechar a janela ? (Que, a propósito, é a escolha padrão.)

Aqui está um teste para demonstrar por que acho que Não fechar a janela é inútil; mas posso estar errado aqui, é claro:

  1. Abra o Terminal. Seu shell é zsh.
  2. Digite bash, pressione Return. Agora seu shell é bash.
  3. Digite exit. Agora seu shell é zsh.
  4. Digite exit. Então:
    • Se você tiver Don't close the window , você terá uma janela inútil que você pode usar para qualquer coisa. Estranho.
    • Se você tiver Close the window ou Close if the shell exited clear , essa janela inútil será fechada automaticamente. Ótimo.
terminal
  • 1 respostas
  • 30 Views
Martin Hope
jsx97
Asked: 2024-12-20 19:34:19 +0800 CST

Exclua recursivamente arquivos vazios e, em seguida, diretórios vazios

  • 5

O script a seguir exclui de forma não recursiva arquivos vazios comuns, sem incluir os com ponto, e então exclui de forma não recursiva diretórios vazios, sem incluir os com ponto, e ignorando a presença de .DS_Storearquivos (ou seja, se o diretório contiver apenas um .DS_Storearquivo, esse diretório será excluído mesmo assim).

rm -f -- *(.L0)

setopt extended_glob
has_files_other_than_DS_Store() [[ -n $REPLY/^(#i).ds_store(#qNDY1) ]]
remove_empty_macos_dirs() {
  local dir ret=0
  for dir do
    rm -f -- $dir/.(#i)ds_store(N.) && rmdir -- $dir || ret=$?
  done
  return $ret
}
remove_empty_macos_dirs *(/^+has_files_other_than_DS_Store)

Alguém poderia mostrar como fazer isso funcionar recursivamente? Ou seja, o primeiro passo é deletar recursivamente todos os arquivos regulares vazios. E então deletar recursivamente os diretórios vazios.

Eu tentaria fazer isso sozinho, mas, para ser honesto, estou com medo de experimentar o rmcomando.

zsh
  • 1 respostas
  • 47 Views
Martin Hope
jsx97
Asked: 2024-12-19 02:18:51 +0800 CST

Herdar modificações de caminho vs. Herdar aliases

  • 5

Meu shell de login é zsh. Adicionei as duas linhas seguintes ao meu .zprofilearquivo:

path+=$HOME/foobar123
alias foo='echo bar'

Então, se eu alternar para bash ou fish, digitando bashou fishe pressionando Return, echo $PATHa parte continuará sendo exibida foobar123, mas o fooalias não funcionará.

Por que isso? Por que aliases e modificações de caminho são tratados de forma diferente?

zsh
  • 1 respostas
  • 37 Views
Martin Hope
jsx97
Asked: 2024-12-17 16:34:40 +0800 CST

Encontre e remova arquivos vazios: '-size 0' vs. '-empty'

  • 5

Para encontrar e remover arquivos vazios, encontrei a seguinte pergunta do Stack Overflow:

https://stackoverflow.com/q/3157343

Há cerca de 10 respostas lá, mas todas elas usam -size 0and not -empty.

Por exemplo, uma resposta +153:

find . -name 'file*' -size 0 -print0 | xargs -0 rm

Outra resposta, +100:

find -name 'file*' -size 0 -delete

Por que isso? Em outras palavras, quais vantagens -size 0fornece sobre -empty?

Minha solução pessoal, para macOS, é

find . -mindepth 1 -maxdepth 1 -type f -empty -print -delete
find
  • 1 respostas
  • 48 Views
Martin Hope
jsx97
Asked: 2024-12-16 19:22:52 +0800 CST

'exec fish' no final do meu '.zshrc' - é possível ignorá-lo?

  • 8

Na maioria das vezes, prefiro usar o shell de peixe no macOS, mas evito torná-lo o shell de login, porque acho que às vezes isso pode causar problemas.

Então, eu simplesmente adicionei exec fishno final do meu .zshrc, e é isso. O que significa que meu shell de login ainda é zsh, e minhas $PATHmodificações ainda estão em .zprofile, mas quando eu abro o terminal, não preciso alternar para fish manualmente. Funciona bem para mim.

Mas então, e se eu ainda quiser mudar de fish para zsh por algum motivo específico? É possível de alguma forma? (Porque se eu simplesmente digitar zshe pressionar Return, serei imediatamente trocado de volta para fish, é claro.)

atualização: Há uma solução alternativa para usar zsh -c, mas ela funciona apenas com alguns comandos.

zsh
  • 2 respostas
  • 466 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