Переместить раздел только с помощью инструментов командной строки на тот же диск

Текст справки Bash для.:

.:. filename [arguments]
    Execute commands from a file in the current shell.

    Read and execute commands from FILENAME in the current shell.  The
    entries in $PATH are used to find the directory containing FILENAME.
    If any ARGUMENTS are supplied, they become the positional parameters
    when FILENAME is executed.

Обратите внимание на фразу :", если предоставлены какие-либо аргументы". Без аргументов текущие позиционные параметры остаются.

$ cat /tmp/sourceme.sh     
printf "%d: " "$#"
printf "<%s> " "$@"
printf "\n"
$ bash -c 'set -- aa bb;. /tmp/sourceme.sh'
2:   
$ bash -c 'set -- aa bb;. /tmp/sourceme.sh foo bar'
2:   

Все другие протестированные мной оболочки (zsh, ksh )ведут себя аналогично. За исключением dash, который всегда оставляет исходные позиционные параметры на месте.

$ dash -c 'set -- aa bb;. /tmp/sourceme.sh foo bar'
2:   

Я не вижу никакого упоминания о сбросе позиционных параметров в определении POSIX для ., поэтому может показаться, что предоставление аргументов для .нестандартно с самого начала.


Вместо исходного сценария вы можете использовать функцию, так как они могут принимать аргументы в стандартной оболочке. В этом случае вы должны получить файл, определяющий функцию.

. файл(define_fun.sh)с определением функции:

#!/bin/sh
f() {
    echo "args: $# $@"     # just a test
    if [ "$#" = 0 ]; then 
        echo please give at least one argument
        return 1
    fi;
    ENVVAR=$1          # this should be visible to the whole shell  
    export ENVVAR      # and any commands called later
} 

А потом использовать:

$. define_fun.sh      # source the file to load the func in the current shell

$ f                    # actually run it: this'll complain
$ f 123 456            # this should set ENVVAR
$ echo $ENVVAR         # and this will print '123'

Вместо этого вы могли бы поместить определение функции в один из файлов инициализации оболочки(~/.profile?Зависит от оболочки.)

0
02.05.2020, 23:29
0 ответов

Теги

Похожие вопросы