실행 파일에 연결하고 일부 매개변수 제거

실행 파일에 연결하고 일부 매개변수 제거

현재 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, 내가 원하는 것은 다음과 같습니다.

  1. ibtool이동하다ibtool_orig
  2. 링크나 스크립트를 입력하면 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 로 바꿀 수도 있습니다 ( 오류 메시지에서 사용하거나 자체적으로 다시 실행할 수 있음).kshzshyashbashexecexec -a "$0"ibtool_orig/path/to/ibtoolargv[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;

음, 길이도 좀 짧네요 :)

관련 정보