Перемещение нескольких файлов в папки с одинаковой структурой

$passв сценарии expectпредставляет собой переменную TCL, которая не имеет ничего общего с переменными оболочки или их неудачным совпадением со строками, переданными в качестве окружения (см. справочную страницу environ(7)). В TCL к среде можно получить доступ через переменную env(, см. справочную страницу tclvars(n)). Итак,

$ cat envtest
#!/usr/bin/env expect
puts $env(pass)
set pass $env(pass)
puts $pass
$ chmod +x envtest
$ export pass=Hunter2
$./envtest
Hunter2
Hunter2
$ 

Следовательно, ваш код expectможет быть записан как

#!/usr/bin/expect -f
spawn ssh bandit1@bandit.labs.overthewire.org -p 2220 -l bandit1
expect "assword:"
send $env(pass)
interact

для прямого доступа к passстроке окружения (ну, в любом случае, к одному из них, так как мало что мешает созданию повторяющихся переменных окружения...)

Существует также множество других способов обработки паролей в expect, не связанных с проблемами среды (, которые могут быть переданы дочерним процессам и прочитаны ими... ).

0
31.12.2019, 17:36
1 ответ

Что-то вроде:

autoload -U zmv
mkdir-and-mv() {
  mkdir -p -- "$2:h" &&
    mv -- "$@"
}

typeset -A c
c=(
  blue   colors
  red    colors
  apple  fruits
  banana fruits
)

zmv -n -P mkdir-and-mv "(**/)((${(j:|:)${(@bk)c}}).txt)" '$1$c[$3]/$2'

(снимите -nдля сухого хода -если все устраивает)

1
28.01.2020, 02:38

Теги

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