[英]shell script for subversion files
該腳本不適用於“?” 案件。 當我直接在命令行中運行時...可以,但是在腳本中無法運行“?” 條件。
svn st svn_promote_WP
M svn_promote_WP\Code\Environment\DEV\properties\build.properties
M svn_promote_WP\Code\Environment\RT\properties\build.properties
? svn_promote_WP\props.pl
這是我的腳本:
#!/usr/bin/sh
meta_data=(`svn st svn_promote_WP | cut -c1`)
meta_files=(`svn st svn_promote_WP | awk '$1~/^[AMD?]$/{for(i=2;i<=NF;i++)print $i}'`)
for index in ${!meta_data[*]}
do
if [ ${meta_data[$index]} = "?" ]; then
echo "${meta_files[$index]} need to be added"
elif [ ${meta_data[$index]} = "M" ]; then
echo "${meta_files[$index]} are modified"
fi
done
輸出:
svn_promote_WP\Code\Environment\DEV\properties\build.properties are modified
svn_promote_WP\Code\Environment\RT\properties\build.properties are modified
所需的輸出:
svn_promote_WP\Code\Environment\DEV\properties\build.properties are modified
svn_promote_WP\Code\Environment\RT\properties\build.properties are modified
svn_promote_WP\props.pl need to be added
更新了更多詳細信息-在命令行上運行時的結果:
$ svn st svn_promote_WP | cut -c1
M
M
?
$ svn st svn_promote_WP | awk '$1~/^[AMD?]$/{for(i=2;i<=NF;i++)print $i}'
svn_promote_WP\Code\Environment\DEV\properties\build.properties
svn_promote_WP\Code\Environment\RT\properties\build.properties
svn_promote_WP\props.pl
這是一個報價問題,但不是一個簡單的問題。 首先,您沒有在測試${meta_data[$index]}
括在雙引號中。 二是?
已在數組分配中擴展。 不幸的是,第二個問題無法通過添加雙引號解決。 您需要更棘手的東西,即
set -f
meta_data=(`svn st svn_promote_WP | cut -c1`)
meta_files=(`svn st svn_promote_WP | awk '$1~/^[AMD?]$/{for(i=2;i<=NF;i++)print $i}'`)
set +f
什么原因? 在您的原始代碼中,bash在svn st svn_promote_WP | cut -c1
的輸出上執行兩項操作svn st svn_promote_WP | cut -c1
svn st svn_promote_WP | cut -c1
:每當遇到空格時,它將其拆分為單個單詞,並擴展通配符(=文件名擴展)。 因此,如果當前目錄中有文件z
,則?
被z
替換。 `svn st svn_promote_WP | cut -c1`
周圍的雙引號`svn st svn_promote_WP | cut -c1`
`svn st svn_promote_WP | cut -c1`
可以防止字分割和文件名擴展,因此svn st svn_promote_WP | cut -c1
的整個輸出svn st svn_promote_WP | cut -c1
svn st svn_promote_WP | cut -c1
未修改地分配給第一個數組元素。 但是您需要一些不同的東西,即“保留單詞拆分,但防止文件名擴展”。 為了獲得這種效果,您必須省略雙引號,並使用一個禁用文件名擴展的shell選項,即-f
。 分配完成后,您可以通過執行set +f
恢復正常的shell行為。
引用變量的用法:
if [ "${meta_data[$index]}" = "?" ]; then
echo "${meta_files[$index]} need to be added"
elif [ "${meta_data[$index]}" = "M" ]; then
echo "${meta_files[$index]} are modified"
fi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.