Eu devo admitir que estou completamente perplexo. Eu tenho tentado e procurando por horas sem sucesso. Eu simplesmente não consigo conciliar zsh e minhas funções pessoais.
$ print -l $fpath
/home/terry/.zsh/functions
, bem como os padrões, que não são necessários aqui.
Aqui é onde eu escolhi para colocar minhas funções. Então estamos bem aqui.
/home/terry/.zsh/functions
contém os seguintes arquivos
-rwxrw-r-- 1 terry terry 274 Feb 6 19:20 _all-files-to-top
-rwxrw-r-- 1 terry terry 253 Feb 6 18:30 _check-for-empty-files
-rwxrw-r-- 1 terry terry 452 Feb 6 18:32 _check-video-duration
-rwxrw-r-- 1 terry terry 302 Feb 6 18:33 _error-1
-rwxrw-r-- 1 terry terry 462 Feb 6 18:34 _error-2
-rwxrw-r-- 1 terry terry 198 Feb 6 18:34 _just-hevc
-rwxrw-r-- 1 terry terry 188 Feb 6 18:36 _just-volume
Por favor, note que eu prefixei os arquivos com sublinhados
conforme instruído.
Tomando o um do topo da lista
#compdef all-files-to-top
#
_all-files-to-top() {
mkdir duplicate_files
mkdir ~/Replace
#
find . -type f -exec mv -n {} ./ \;
find . -empty -type d -delete
while [ -d * ]; do
array=(find . -type d)
for x in $array ; do mv -t duplicate_files "$x" ; done
find . -name "duplicate_files" -exec mv {} ~Replace
return
}
Eu tentei com e sem #compdef
Eu tentei com #!/bin/zsh
Na parte superior e abaixo de #compdef
e eu tentei e sem #!/bin/zsh
Não consegui encontrar nada que diga se devo ou não fazer
arquivo executável por usuários não-root, então eu tentei como executável
e como não executável.
Eu também tentei com e sem o _all-files-to-top () {
tanto com e sem o sublinhado.
O programa que chama a função começa com #!/bin/zsh -xv
é iniciado diretamente a partir da linha de comando no terminal para
depuração
Aqui está a impressão da tela
terry-TP500LA% 2mkv
# /etc/zsh/zshenv: system-wide .zshenv file for zsh(1).
#
# This file is sourced on all invocations of the shell.
# If the -f flag is present or if the NO_RCS option is
# set within this file, all other initialization files
# are skipped.
#
# This file should contain commands to set the command
# search path, plus other important environment variables.
# This file should not contain commands that produce
# output or assume the shell is attached to a tty.
#
# Global Order: zshenv, zprofile, zshrc, zlogin
if [[ -z "$PATH" || "$PATH" == "/bin:/usr/bin" ]]
then
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
fi
+/etc/zsh/zshenv:15> [[ -z /home/terry/scripts/cron:/home/terry/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin || /home/terry/scripts/cron:/home/terry/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin == /bin:/usr/bin ]]
#!/bin/zsh -xv
top=$(pwd)
+/home/terry/scripts/2mkv:3> top=+/home/terry/scripts/2mkv:3> pwd
+/home/terry/scripts/2mkv:3> top=/home/terry/New_Videos
# call function
# moves any duplicate files to ~/Replace
mkdir duplicate_files
+/home/terry/scripts/2mkv:8> mkdir duplicate_files
mkdir ~/Replace
+/home/terry/scripts/2mkv:9> mkdir /home/terry/Replace
mkdir: cannot create directory ‘/home/terry/Replace’: File exists
all-files-to-top
+/home/terry/scripts/2mkv:10> all-files-to-top
/home/terry/scripts/2mkv:10: command not found: all-files-to-top
exit 0
+/home/terry/scripts/2mkv:12> exit 0
terry-TP500LA%
Ah, e uma última coisa - ortografia. Eu copiei o nome para o
área de transferência e usado 'localizar e substituir' em todos os casos.
Eu realmente não sei mais o que tentar. Poderia algum tipo de alma fornecer
um exemplo do mundo real (não foo) de uma função com uma explicação de
o que é necessário para que funcione corretamente? Poderia ser algo como
o método de codificação usado no script ou função? O meu é UTF-8.
all-files-to-top
+/home/terry/scripts/2mkv:10> all-files-to-top
/home/terry/scripts/2mkv:10: command not found: all-files-to-top