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
정리로 복구를 호출하는 것과 같습니다. 그러면 퍼지를 사용하여 복원을 호출할 수 있도록 코드를 어떻게 구현합니까?
함수가 아니라 스크립트여야 합니다. Restore.sh
name 에 대한 하드 링크를 만들었지 Purge.sh
만 ./Purge.sh를 사용하여 호출하면 여전히 표준 복원 코드가 실행됩니다. 하드 링크된 파일에 대해 복원이 호출되었는지 어떻게 알 수 있습니까?
답변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