Создание символической ссылки в общей папке SMB

Вы не можете заставить скрипт видеть другое значение для $test, чем test1, учитывая способ написания вашего скрипта в настоящее время (он безоговорочно присваивает строку test1переменной, а затем печатает ее ). Поиск скрипта не поможет. Единственное, что может сделать сценарий, — это установить для переменной testзначение test1в текущей среде, независимо от ее предыдущего значения.


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

В простейшем случае это может выглядеть так

#!/bin/sh

value=${1:-test1}
printf 'value is %s\n' "$value"

Я избегаю использовать имя testдля переменной, так как это также имя стандартной утилиты. Не то чтобы это вызывало проблемы, но это делает код менее двусмысленным для чтения. Я также использую /bin/sh, а не bashв строке #!-, так как скрипт не использует никаких специфических функций bash-. Тем не менее, он по-прежнему будет выполняться bash, а также ksh, yash, zshи любой другой оболочкой POSIX.

Это установит значение переменной valueравным любому первому аргументу командной строки, если только он не был предоставлен, и в этом случае он устанавливается в строку test1. ${parameter:-word}— это стандартная замена параметра, которая расширяется до word, если $parameterявляется пустой строкой или если эта переменная не установлена.

Тестирование:

$./script.sh
value is test1
$./script.sh hello
value is hello

Разрешение сценарию использовать опцию, -v,который принимает одну опцию -аргумент:

#!/bin/sh

value=test1

while getopts 'v:' opt; do
    case $opt in
        v) value=$OPTARG ;;
        *) echo 'error in command line parsing' >&2
           exit 1
    esac
done

# not needed if you're not expecting operands after the options
# on the command line:
shift "$(( OPTIND - 1 ))"

printf 'value is %s\n' "$value"

Тестирование последнего скрипта:

$./script.sh
value is test1
$./script.sh -v hello
value is hello
1
08.11.2020, 22:53
1 ответ

По понятным причинам с клиента вы не можете получить доступ к файлам, кроме тех, которые настроены для обмена с вами сервером.

Но если у вас есть контроль над сервером SMB, вы можете установить опцию wide links = Yesв его конфигурационном файле. Хотя не рекомендуется.

0
18.03.2021, 22:51

Теги

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