두 번째 이름으로 함수(작업) 호출

두 번째 이름으로 함수(작업) 호출

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.shname 에 대한 하드 링크를 만들었지 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

관련 정보