サブbashスクリプトに別の$ 0を渡すことはできますか?

サブbashスクリプトに別の$ 0を渡すことはできますか?

私はこれが「デザイナーが意図したものではない」と聞こえるかもしれませんが、私が修正していたbashスクリプトは、変更が許可されていない他のbashスクリプトを呼び出す必要がある実際の状況に直面しました。

「修正できないbashスクリプト」は次のように始まります。

source `dirname $0`/setenv.sh

setenv.shまた、次から始まり、SCR2PATH=source "$( cd "$(dirname "$0")" ; pwd -P )"変更できません)

$0呼び出しスクリプトとは異なる方法を使用するために添え字をだますことができるトリックはありますか?

ベストアンサー1

たぶんこれを行うことができます:

bash -c '. /path/to/unmodifiable' /fake/path args ...

明らかに/path/to/unmodifiableこれはシェルスクリプトでなければなりません。この愚かなトリックは、他の種類の実行可能ファイルでは機能しません。これも機能しません(ただしzsh他のシェルでは動作します)。dashksh

しなければならないなら源泉変える呼ぶ変更不可能なスクリプトの場合は、外部スクリプトを呼び出すラッパーで同じトリックを使用するか、それ自体を再度呼び出すことができます。

$ cat unmodifiable
#! /bin/sh
printf '{%s} ' "$0" "$@"
echo

$ cat becoming
#! /bin/sh
[ "$MYSELF" ] || MYSELF=$0 exec sh -c '. "$MYSELF"' "I'm the mountain!" "$@"
. ./unmodifiable

$ chmod 755 becoming
$ ./becoming 1 2 3
{I'm the mountain!} {1} {2} {3}

おすすめ記事