rsyncコマンドを使用して2つのフォルダを同期しており、rysncが成功した場合はファイルを正常にコピーしてコピーするときにSuccess_FolderNameなどのソースフォルダ名パラメータを追加したいと思います。私は $(basename !:3) を使用して、フォルダ名の 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
最後の呼び出しの3番目のパラメータに置き換えられます。だからあなたに関する限り、
folderParam=$(basename !rsync:3)