私は現在Xamarin Studioを使用していますが、このバージョンにはバグがあります。実行可能ファイルに2つのパラメータを追加することで、出力にエラーメッセージがあふれ、ビルド時間が1分から少なくとも10分に遅くなりました。
元の実行可能ファイルを移動し、問題のある2つのパラメータを削除して元の場所に配置するbashスクリプトまたはリンクを作成する方法はありますか?
したがって、Xamarinは通常どおりコマンドを実行しますが、問題のある2つのパラメータは元のコマンドに渡されません。
はい/usr/bin/ibtool --errors --warnings --notices --output-format xml1 --minimum-deployment-target 7.0 --target-device iphone --target-device ipad --auto-activate-custom-fonts --sdk iPhoneSimulator9.0.sdk --compilation-directory Main.storyboard
、私が望むものは次のとおりです。
ibtool
移動するibtool_orig
- リンクまたはスクリプトを入力すると、
ibtool
問題のパラメータが削除され、それをに渡してibtool_orig
次のコマンドを提供します。
/usr/bin/ibtool_orig --errors --output-format xml1 --minimum-deployment-target 7.0 --target-device iphone --target-device ipad --auto-activate-custom-fonts --sdk iPhoneSimulator9.0.sdk --compilation-directory Main.storyboard
(今ibtool
は消えibtool_orig
たので参考にしてください--errors --warnings
)
どんなアイデアがありますか?
答え1
正式な方法は、次のような形状のループです。
#! /bin/sh -
for i do # loop over the positional parameters
case $i in
--notices|--warnings) ;;
*) set -- "$@" "$i" # append to the end of the positional parameter
# list if neither --notices nor --warnings
esac
shift # remove from the head of the positional parameter list
done
exec "${0}_orig" "$@"
または、 path#! /bin/sh -
に置き換えることも、pass as に置き換えることもできます(エラーメッセージで使用するか、それ自体を再実行できます)。ksh
zsh
yash
bash
exec
exec -a "$0"
ibtool_orig
/path/to/ibtool
argv[0]
答え2
#!/bin/sh
new='/usr/bin/ibtool_orig'
for i; do
if [ "$i" = --errors ] || [ "$i" = --warnings ]; then
: # skip these
else
new="$new $i"
fi
done
exec $new
これは引数に引用符、角かっこなどの特殊なシェル文字がないと仮定します。処理がより複雑になると、Perlスクリプトが簡単になります。
#!/usr/bin/perl
my @new = grep(!/^--(errors|warnings)\z/, @ARGV);
exec '/usr/bin/ibtool_orig', @new;
まあ、長さも少し短いです:)