我正在编写一个名为 的函数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.sh
name的硬链接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