gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:52:46 25 4
gpt4 key购买 nike

在“升级”到 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; do
# Ignore known bad arguments
[[ $var != '-dependency_info' ]] && args+=("$var")
done

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

关于bash - 如何拦截和删除 bash 中的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21542054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com