rsync 명령을 사용하여 두 폴더를 동기화하고 있으며 rysnc가 성공하면 파일을 성공적으로 복사하고 복사할 때 Success_FolderName과 같은 소스 폴더 이름 매개 변수를 추가하고 싶습니다. 저는 $(basename !:3)을 사용하여 폴더 이름인 세 번째 매개변수를 가져왔습니다.
bash /Sync.sh 10_03_2016
#! /bin/bash
set -o history
set -o histexpand
/usr/bin/rsync -avh -r /Source/$1 /Destination/
rsyncStatus=$?
folderParam=$(basename !:3)
if($rsyncStatus==0)
then
cp /Status/Sucesss /Result/Success_$folderParam
else
cp /Status/Failure /Result/Failure_$folderParam
if
산출
실수
/Sync.sh: line 7: :3: bad word specifier
파일은 "Success_"로 복사됩니다.
답변1
왜 일을 그렇게 복잡하게 만드는지 이해가 안 돼요. !:N
필요한 모든 것을 이미 매개변수로 전달하고 있는데 왜 (다소 까다로운) 기록 확장 기능을 사용합니까? 예를 들어:
#! /bin/bash
source="/Source/$1"
destination="Destination/"
folderParam="$(basename "$source")"
/usr/bin/rsync -avh -r "$source" "$destination"
rsyncStatus=$?
if($rsyncStatus==0)
then
cp /Status/Sucesss /Result/Success_"$folderParam"
else
cp /Status/Failure /Result/Failure_"$folderParam"
if
또는 더 간단하게:
#! /bin/bash
source="/Source/$1"
destination="Destination/"
folderParam="$(basename "$source")"
if /usr/bin/rsync -avh -r "$source" "$destination"; then
cp /Status/Sucesss /Result/Success_"$folderParam"
else
cp /Status/Failure /Result/Failure_"$folderParam"
if
심지어:
#! /bin/bash
source="/Source/$1"
destination="Destination/"
folderParam="$(basename "$source")"
touch "/Result/Failure_$folderParam"
/usr/bin/rsync -avh -r "$source" "$destination" &&
mv /Result/Failure_"$folderParam" /Result/Success_"$folderParam"
답변2
특별한답변더 좋지만, 정말로 히스토리 연산자를 사용하고 싶다면 참조할 명령을 지정할 수 있습니다.
!rsync:3
rsync
마지막 호출의 세 번째 매개변수 로 대체됩니다 . 그래서 당신에 관한 한,
folderParam=$(basename !rsync:3)