Как я выхожу из имени подкаталога с амперсандом в нем?

Используя 'ожидают', какой Вы просите, возможно, и некоторые люди все еще используют его. Ожидать сценарий может 'поймать' вывод команд, и можно 'ответить' на основе их вывода. Ваш сценарий будет похож:

spawn scp some_file user@host:/destination
expect "*?assword:*"
send -- "Your Super Secret Password Here\r"
send -- "\r"

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

Мое личное мнение - то, что самым безопасным неинтерактивным путем является аутентификация с закрытым ключом.

9
11.11.2016, 05:32
2 ответа

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

  • Поместите одинарные кавычки вокруг всего этого: ' -3ab_&_-3dc.img'
  • Поместите обратную косую черту перед каждым неприятным символом: -3ab_\&_-3dc.img

Существует два исключения:

  • Метод одинарной кавычки не работает на одинарную кавычку. Обратная косая черта не является особенной в одинарных кавычках, таким образом, Вы не можете непосредственно использовать это также. То, что можно сделать, закончить единственно заключенную в кавычки строку, сразу использовать обратную косую черту плюс одинарная кавычка и перезапустить одинарную кавычку. Так, например, если название каталога foo'bar\qux: cd 'foo'\''bar\qux'. Можно помнить это тот путь: в одинарных кавычках, '\'' получает Вас одинарная кавычка.
  • Метод обратной косой черты не работает на новые строки: новая строка обратной косой черты просто проигнорирована. Необходимо поместить одинарные кавычки вокруг новой строки.

Можно использовать двойные кавычки также, но затем необходимо поместить обратную косую черту перед некоторыми символами. Одинарные кавычки более просты.

Здесь существует дополнительная трудность, которая является, что название каталога начинается с тире. Тот символ говорит cd команда (как почти каждая команда), за которым следует опция. Тире не является особенным для оболочки, только для команды, таким образом, кавычки не будут влиять на него. У Вас есть два способа передать аргумент, который начинается с тире к команде, не интерпретируя его как опцию:

  • Найдите другой способ выразить этот аргумент. Для имени файла, добавляя ./ впереди все еще определяет тот же файл.
  • Поместите аргумент -- прежде. Это говорит команде прекращать искать опции.

Таким образом, вот некоторые пути, можно измениться в этот подкаталог:

cd -- '-3ab_&_-3dc.img'
cd -- -3ab_\&_-3dc.img
cd ./-3ab_\&_-3dc.img
cd './-3ab_&_-3dc.img'
11
27.01.2020, 20:05
  • 1
    Спасибо. Мысль я попробовал тот формат также, но я забыл выходить из амперсанда (как в Вашем 3-м примере). Когда я сделал, это работало. –  RCinICT 26.03.2013, 02:02

Амперсанда действительно должны оставить, но проблема, которую Вы имеете, вероятна с продвижением -, вместо амперсанда. Продвижение - сделанный CD думает, что Вы являетесь передающими в опциях. Можно работать вокруг этого при помощи ./:

cd './-3ab_&_-3dc.img'
5
27.01.2020, 20:05
  • 1
    & определенно проблема. Что касается -, это зависит от оболочки. Zsh довольно счастлив cdлуг к каталогу, запускающемуся с a -. Однако удар не. –  Patrick 26.03.2013, 01:52
  • 2
    Спасибо. Мысль я попробовал тот формат также, но я забыл выходить из амперсанда. Когда я сделал, это работало. –  RCinICT 26.03.2013, 02:01

Теги

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