簡體   English   中英

Subversion文件的Shell腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM