Chamando uma função por um segundo nome (lição de casa)

5

Estou escrevendo uma função chamada restore que copiará um arquivo de um diretório de backup para o diretório atual. Agora preciso criar um link físico para restaurar, para que possa ser chamado de purge . Como eu iria implementá-lo para que eu pudesse usar o if declaração if [ "$0" = "purge" ] para quando a restauração é chamada como purge?

Aqui está o meu código, embora eu o encurte desde que eu testei (funciona):

restore(){
if [ "$1" = "-p" ] || [ "$0" = "purge" ]; then
while [ ! ]
    do
    #Purge code, etc...
    done


elif [ "$1" != "-p" ]; then
select fname in $(find /$HOME/Backup -name "$1*" | sed 's!.*/!!' | sed 's!$1!!') quit
        do
             #If restore is called with an argument code...
        done

local newfname=$(echo "$fname"|sed -E 's/[0-9]{11}$//')
cp -i "/$HOME/Backup/$fname" "$newfname"
exit 0
fi

while [ ! ]
do
fname=""
select fname in $(ls /$HOME/Backup) quit
        do
            #Restore with no arguments code...
        done

local newfname=$(echo "$fname"|sed -E 's/[0-9]{11}$//')
cp -i "/$HOME/Backup/$fname" "$newfname"
done
}

Chamar restauração com a opção -p é o mesmo que invocar restauração como limpeza. Então, como eu implementaria o código para que a restauração pudesse ser invocada usando purge?

Supõe-se que seja um script e não uma função. Fiz um link físico para Restore.sh named Purge.sh , mas quando o chamo usando ./Purge.sh, ele ainda executa o código de restauração padrão. Como posso determinar se o Restore é chamado pelo arquivo de link físico?

    
por mike 08.12.2017 / 23:30

2 respostas

5

Faça o link físico para o restore.sh :

ln restore.sh link_to_restore.sh

O conteúdo do arquivo restore.sh :

#!/bin/bash

if [ "$0" = "./link_to_restore.sh" ]; then
    echo foo
elif [ "$0" = "./restore.sh" ]; then
    echo bar
fi

Teste

$ ./restore.sh 
bar
$ ./link_to_restore.sh 
foo
    
por 09.12.2017 / 01:02
8

Isso seria uma trapaça? No seu script de restauração, você ainda tem sua lógica -p e, em seguida, cria uma função de limpeza separada da seguinte forma:

purge () { /path/to/restore.sh -p "$@"; }

No seu script de restauração, você deve pegar o wrapper de função dele ou eu acredito que ele será essencialmente originado e não executado.

    
por 09.12.2017 / 00:02