加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在bash中拦截和删除命令行参数

发布时间:2020-12-15 18:24:48 所属栏目:安全 来源:网络整理
导读:在“升级”到Mavericks和 Xcode 5之后,我遇到了各种小问题,以使Xcode编译我的一些旧项目. 似乎Xcode正在向ld链接器传递一个新参数,并且实际上并没有阻止Xcode这样做.由于各种原因我需要的旧版本的ld在看到它不知道的参数时会出错(因此我的项目无法编译). 我
在“升级”到Mavericks和 Xcode 5之后,我遇到了各种小问题,以使Xcode编译我的一些旧项目.

似乎Xcode正在向ld链接器传递一个新参数,并且实际上并没有阻止Xcode这样做.由于各种原因我需要的旧版本的ld在看到它不知道的参数时会出错(因此我的项目无法编译).

我需要的是在旧版本的ld上使用瘦包装来删除某些情况下的“坏”参数.我认为bash shell脚本是完美的,但bash不是我的强项.

这是我得到的:

# Look for conditions necessary to use older ld
... # (placeholder,obviously)

# Run older ld (pseudo condition)
if [ <old_ld_condition> ]; then
    ARGS=''
    for var in "$@"; do
        # Ignore known bad arguments
        if [ "$var" = '-dependency_info' ]; then
            continue
        fi

        ARGS="$ARGS $var"
    done

    /path/to/old/ld "$ARGS"
else
    /path/to/new/ld "$@"
fi

但是,运行/ path / to / old / ld“$ARGS”会导致ld将整个$ARGS字符串解释为一个参数.运行/ path / to / old / ld $ARGS会导致ld接收以前转义过的字符串的非转义版本.

显然,我误解了$@的本质,如何操纵它,以及如何将操作传递给旧的ld.感谢大家.

这应该工作:
# Run older ld (pseudo condition)
if [ <old_ld_condition> ]; then
    ARGS=()
    for var in "$@"; do
        # Ignore known bad arguments
        [ "$var" != '-dependency_info' ] && ARGS+=("$var")
    done

    /path/to/old/ld "${ARGS[@]}"
else
    /path/to/new/ld "$@"
fi

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读