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 / unix / 问题

Perguntas[zsh](unix)

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
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-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
Woodstock
Asked: 2025-03-13 06:53:55 +0800 CST

Comportamento da guia Vanilla com zsh-autocomplete

  • 7

Estou usando zsh-autocomplete ( https://github.com/marlonrichert/zsh-autocomplete ) e tentando manter meu Tab conclusion “vanilla” (ou seja, expand-or-complete em vez de selecionar a sugestão superior). Tudo está funcionando muito bem, exceto por uma falha estranha: sempre que eu digito ~/, ele expande para / em vez do meu diretório $HOME.

Eu realmente gostaria de manter o comportamento como o da expansão vanilla, ou seja, várias abas apenas completam de forma inequívoca e não vão além disso.

Aqui está a parte relevante do meu ~/.zshrc:

# Load zsh-autocomplete
source /path/to/zsh-autocomplete.plugin.zsh

# Rebind Tab to normal Zsh expansion
bindkey '^I' expand-or-complete

Apesar dessas configurações, digitar algo como ~/Docu ainda expande para /… Tentei remover todo o resto da minha configuração para isolar o problema, mas sem sorte. Alguém mais passou por isso ou sabe como consertar?

Agradecemos antecipadamente por quaisquer dicas ou sugestões!

ps

Além disso, embora isso seja próximo, não dá o comportamento de tabulação 'vanilla'. Eu basicamente só quero que a tabulação fique como está, sem zsh-autocomplete.

zstyle ':autocomplete:*complete*:*' insert-unambiguous yes
zstyle ':completion:*:*' matcher-list 'm:{[:lower:]-}={[:upper:]_}' '+r:|[.]=**'
zsh
  • 1 respostas
  • 22 Views
Martin Hope
Marcus Müller
Asked: 2025-03-10 18:39:47 +0800 CST

zsh: substitute-if-undef-or-null para $1, $2 …: ${1:substitution} não funciona

  • 5

Gostaria de ter parâmetros padrão, ou seja, meu exemplo mínimo reproduzível é:

#!/usr/bin/zsh
a=${1:a}
printf 'a: "%s"\n' "${a}"
b=${2:./build}
printf 'b: "%s"\n' "${b}"

Eu esperaria ver, ao executar ./demo.zshsem argumentos:

a: "a"
b: "./build"

Em vez disso eu recebo

a: ""
./demo.zsh:4: bad floating point constant
  • por que ${1:a}parece assumir $1que está definido e não é zero, mas o $aexpandido é uma string vazia?
  • de onde vem a análise incorreta de ponto flutuante? Se eu substituir ./buildpor build, ele reclama sobre bser um modificador desconhecido.

Se eu corro ./demo.zsh asdf bar, eu ganho

a: "/tmp/fasf"
./demo.zsh:4: bad floating point constant

o que, francamente, é ainda mais confuso; /tmp/de onde vem (é o cwd).

zsh
  • 2 respostas
  • 76 Views
Martin Hope
sh1
Asked: 2025-03-07 14:19:55 +0800 CST

Como melhorar a capacidade de resposta do git hash no prompt do zsh?

  • 5

Eu queria colocar o hash git atual no meu prompt; mas minha abordagem inicial foi um pouco lenta:

psvar[1]="$(git log -n1 --pretty='format: %h' 2>/dev/null)"

(com $PROMPTinclusão %1vpara tornar isso visível)

Eu tentei o vcs_infoplugin, mas ele também estava lento. Então acabei escrevendo minha própria função:

function githead() {
  local commondir ref hash _
  local gitdir="${1:a}"
  until [[ -e "$gitdir/.git" ]]; do
    local updir="${gitdir%/*}"
    [[ "$updir" == "$gitdir" ]] && return 1
    gitdir="$updir"
  done
  gitdir="$gitdir/.git"
  [[ -f "$gitdir" ]] && read _ gitdir < "$gitdir"
  read _ ref < "$gitdir/HEAD"
  local commondir="$gitdir/commondir"
  [[ -e "$commondir" ]] && gitdir="$gitdir/$(<$commondir)"
  ref="$gitdir/$ref"
  read hash <"$ref"
  print -r "${hash::12}"
  return 0
}

Certamente é mais rápido, mas isso é obrigado a ser frágil. Em particular, alguns dos arquivos que tenho que ler parecem que podem conter mais de uma linha de conteúdo, e não necessariamente colocar a linha que eu quero no topo.

Existe uma maneira rápida de obter o hash atual do git, que seja mais robusta do que o que escrevi manualmente?

zsh
  • 2 respostas
  • 30 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-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
sporkl
Asked: 2025-02-22 04:26:21 +0800 CST

Como compactar PDFs em lote?

  • 5

Estou querendo compactar alguns PDFs em lote, usando o truque de conversão para/de ps descrito em outro lugar. Tenho uma função definida em um arquivo .zshrc:

function pdfcompress() {
    for f in "$1"; do
        echo "compressing $1"
        pdf2ps "$f" "$f".ps
        ps2pdf -dPDFSETTINGS=/default "$f".ps "$f"
        rm "$f".ps
    done
}

Meu entendimento é que eu deveria conseguir passar uma lista de PDFs, e ele os compacta. No entanto, acontece o seguinte:

% ls | pdfcompress
compressing
Error: /undefinedfilename in --findlibfile--
Operand stack:
   ()
Execution stack:
   %interp_exit   .runexec2   --nostringval--   findlibfile   --nostringval--   2   %stopped_push   --nostringval--   findlibfile
   findlibfile   false   1   %stopped_push   findlibfile   1815   1   3   %oparray_pop   findlibfile
Dictionary stack:
   --dict:743/1123(ro)(G)--   --dict:0/20(G)--   --dict:85/200(L)--
Current allocation mode is local
GPL Ghostscript 10.04.0: Unrecoverable error, exit code 1
GPL Ghostscript 10.04.0: Device 'pdfwrite' requires an output file but no file was specified.
**** Unable to open the initial device, quitting.

Parece que nenhum dos nomes de arquivo está sendo passado, por algum motivo. Também tentei abordagens com find . -iname "*.pdf" -exec pdfcompress, e canalizando para xargs pdfcompress, mas nenhuma delas funciona porque a função não está no ambiente. Outras vezes, as variáveis ​​de espaço reservado parecem ser interpretadas como strings literais.

Estou tentando fazer isso funcionar de alguma forma há mais de uma hora, sem sorte. Alguma dica?

Tenho uma estrutura de pastas de PDFs que gostaria de manter, então uma solução que funcionasse recursivamente dentro de diretórios seria a melhor, se possível.

Obrigado!

zsh
  • 1 respostas
  • 44 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