我使用Texture Packer和一個shell腳本在我的Xcode項目的每個「清理」或「構建」中生成精靈表。但是,我想以條件方式生成它們(編譯標誌或命令行)。ShellScript + Xcode
我不是用來使用shell腳本,我不知道如何從我的shell腳本中的項目設置或命令行中獲取標誌。
其他變量$ {ACTION}是否可用? 如何使用項目標誌或命令參數設置它們?
THX
我使用Texture Packer和一個shell腳本在我的Xcode項目的每個「清理」或「構建」中生成精靈表。但是,我想以條件方式生成它們(編譯標誌或命令行)。ShellScript + Xcode
我不是用來使用shell腳本,我不知道如何從我的shell腳本中的項目設置或命令行中獲取標誌。
其他變量$ {ACTION}是否可用? 如何使用項目標誌或命令參數設置它們?
THX
人們通常認爲傳遞標誌作爲參數傳遞給一個程序,即
myShellScript -o (options) flag1 flag2 file1 file2 file...n
這需要的參數作爲選項的管理,無論是與一個case語句或致電getopts
等專業功能。在SO搜索getopts應該會給你所需的所有信息。
我在下面討論的是假設你可以修改你的腳本來放入$ {ACTION}變量,我把它稱爲標誌變量。當您提到條件操作時,這就是我使用'true'或'false'來控制運行代碼塊的標誌變量的原因。如果您理解了這些概念,那麼修改代碼以有條件地運行流程並不難,並且代碼修改量最少。如果你給我們一個特定的小的例子,'我需要我的代碼來有條件做',我和其他人可以很容易地幫助你解決你的問題。
所以另一種方式,可能更適合你的需要,是建立你的腳本環境,因此所需要的任何變量的shell腳本過程可視化。你可以用兩種不同的方式來做到這一點。
標準設置環境變量和之前導出它們你打電話給你的腳本,即
flag1=true ; flag2=false ; export flag1 flag2
myShellScript file1 file2 file...n
(文件1 - > file..n可能不需要你的shell腳本)
或作爲腳本調用的一部分,將標誌變量傳入您的shell腳本
flag1=true flag2=false myShellScript file1 file2 file...n
爲了使這些方法之一是有用的,你需要使用該標誌的變量,比如
if ! ${flag1:-false} ; then
print "Skipping flag one code"
else
print "Inside flag one code, doing stuff"
fi
的:-
是一個shell參數運營商,說「如果有標誌1不存在或設置爲「」,暫時使用此值:-
之後的值,在這種情況下爲false。
隨着我們的2個技術上面,FLAG1 確實有一個值,「真」,所以臨時 substituion不會發生。
請注意,如果您使用技巧1,則將flag1設置爲具有值(true),並且將其關閉的唯一方法是將其設置爲不同的值。符號將永遠不會生效。您必須從命令行中取消設置flag1才能看到:-
表示法再次運行。當您使用命令行測試代碼時,這可能會讓您感到困惑,因此請務必始終取消設置您希望使用任何參數修飾符(還有其他參數)處理的變量。
如果你不習慣使用解析爲if true then ; print "true" ; fi
的語句,這裏有一點需要解釋。
shell的評估順序查找變量,即$ {flag1}並替換它爲這些變量找到的任何值。因此使用if ${flag1:-false} ; then
...發現var,它沒有值,所以然後值false被替換。值false解析爲命令/bin/false
,以便執行命令。它的唯一目的是返回一個非零的退出代碼。
你可以通過使用命令行,'打開調試',與set -vx
並玩耍,看看很多。這是一個快速示例。
**# Shell built-ins**
/home/Shellter :>which true
true
/home/Shellter :>which false
false
# which point to
/home/Shellter :>srchpath true
-rwxrwxr-x 1 Shellter None 17 Jan 13 2009 /usr/bin/true
/home/Shellter :>srchpath false
-rwxrwxr-x 1 Shellter None 17 Jan 13 2009 /usr/bin/false
#turn on debugging mode
/home/Shellter :>set -vx
# test true and false at the most basic level
# then what is the exit code?
/home/Shellter :>true
true
[1]+ true
/home/Shellter :>echo $?
echo $?
[1]+ echo 0
0
/home/Neil_2 :>false
false
[1]+ false
/home/Neil_2 :>echo $?
echo $?
[1]+ echo 1
1
/home/Shellter :>unset myFlag
unset myFlag
[1]+ unset myFlag
/home/Shellter :>if ${myFlag:-false} ; then print "found true value" ; else print "found false value" ; fi
if ${myFlag:-false} ; then print "found true value" ; else print "found false value" ; fi
[1]+ false
[1]+ print 'found false value'
found false value
# set myFlag
/home/Shellter :>myFlag=true
myFlag=true
[1]+ myFlag=true
/home/Shellter :>if ${myFlag:-false} ; then print "found true value" ; else print "found false value" ; fi
if ${myFlag:-false} ; then print "found true value" ; else print "found false value" ; fi
[1]+ true
[1]+ print 'found true value'
found true value
我希望這會有所幫助。
P.S.因爲你似乎是一個新用戶,如果你得到一個可以幫助你的答案,請記住將它標記爲已接受,或者給它一個+(或 - )作爲有用的答案
我合併了你的未註冊帳戶,你現在應該能夠選擇你喜歡的答案是正確的。 – 2011-03-31 10:22:05