通过第二个名称调用函数(作业)

通过第二个名称调用函数(作业)

我正在编写一个名为 的函数restore,它将文件从备份目录复制到当前目录。我现在需要创建一个硬链接来恢复,以便可以将其称为purge.我将如何实现它,以便我可以使用恢复被称为清除时的if语句?if [ "$0" = "purge" ]

这是我的代码,尽管我会缩短它,因为我已经测试了它(它有效):

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
}

使用该选项调用恢复-p与调用恢复作为清除相同。那么我该如何实现代码以便可以通过使用 purge 来调用恢复呢?

它应该是一个脚本而不是一个函数。我创建了一个到Restore.shname的硬链接Purge.sh,但是当我使用 ./Purge.sh 调用它时,它仍然运行标准的 Restore 代码。如何判断Restore是否被硬链接文件调用?

答案1

这会不会是作弊?在恢复脚本中,您仍然保留-p逻辑,然后创建一个单独的清除函数,如下所示:

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

在您的恢复脚本中,您应该将其函数包装器取出,否则我相信它本质上只是被获取而不是被执行。

答案2

做硬链接到restore.sh

ln restore.sh link_to_restore.sh

文件内容restore.sh

#!/bin/bash

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

测试

$ ./restore.sh 
bar
$ ./link_to_restore.sh 
foo

相关内容