По умолчанию удаленные пути scp
интерпретируются относительно домашнего каталога, поэтому вам вообще не нужен ~
:
scp user@remote.host.com:some/file/name filename
загрузит some / file / name
из домашнего каталога пользователя
и сохраните его как filename
локально. Если вы хотите использовать абсолютный путь к файлу на удаленном сервере, запустите его с /
: scp host: / etc / passwd passwd
.
Строго говоря, возможно, что ваш сервер интерпретирует вещи по-другому. В этом случае вы можете поместить ~
в свой сценарий, вместо того, чтобы каждый раз повторять его в командной строке (будь ленив, насколько хотите!):
scp user@remote.host.com:~/"$location" "$name"
Таким образом, ваша оболочка никогда не получит шанс интерпретировать это. (Также можно указать ~
в командной строке: \ ~
или '~'
, но это больше работы, чем необходимо.) Я представляю себе первое. подход, описанный выше, тем не менее, будет работать.
Еще одно примечание о переменной name
. Вы говорите, что хотите, чтобы это было просто базовое имя файла. Для этой цели существует команда basename
command :
name="$(basename "$location")"
Это проще, чем запускать все через sed
.
Во-первых, имейте в виду, что изменение логики кода вашего модуля в соответствии с результатами других модулей является необычным: это обычно делается с помощью управляющих флагов, таких как обязательный
и обязательный
, которые управляют, какие модули вызываются, в каких ситуациях (т.е. в соответствии с текущим состоянием цепочки, результатами предыдущих модулей). С учетом этого можно представить, как адаптировать поведение модуля таким путем:
auth [success=1] default_pam.so
auth [success=done default=die] my_custom_pam.so default_failed
auth requisite my_custom_pam.so
Эта цепочка имеет следующую логику:
success = 1
) и пропустите модуль 1. Цепочка достигает моего _ пользовательского _ pam
, вызываемого без аргументов, которые должны быть успешными ( requite
). моей _ пользовательской _ pam
, вызываемой с аргументом, default _ failed
. Цепочка остановится после этого модуля ( выполнено
или выполнено
) и определит общий результат. Здесь ключевым элементом является аргумент, переданный my _ custom _ pam
. Проверяя argc
и argv
в подпрограмме pam _ sm _ authenticate
, можно адаптировать логику в соответствии с текущим состоянием цепочки.