현재 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;
음, 길이도 좀 짧네요 :)