How to change argv[0] value in shell / bash script?

前端 未结 3 898
无人及你
无人及你 2021-01-15 05:11

The set command can be used to change values of the positional arguments $1 $2 ...

But, is there any way to change $0 ?

3条回答
  •  暗喜
    暗喜 (楼主)
    2021-01-15 05:26

    Here is another method. It is implemented through direct commands execution which is somewhat better than sourcing (the dot command). But, this method works only for shell interpreter, not bash, since sh supports -s -c options passed together:

    #! /bin/sh
    # try executing this script with several arguments to see the effect
    
    test ".$INNERCALL" = .YES || {
        export INNERCALL=YES
        cat "$0" | /bin/sh -s -c : argv0new "$@"
        exit $?
    }
    
    printf "argv[0]=$0\n"
    i=1 ; for arg in "$@" ; do printf "argv[$i]=$arg\n" ; i=`expr $i + 1` ; done
    

    The expected output of the both examples in case ./the_example.sh 1 2 3 should be:

    argv[0]=argv0new
    argv[1]=1
    argv[2]=2
    argv[3]=3
    

提交回复
热议问题