Вы можете сделать это:
for i in ABC.*; do cp {ABC,DEF}."${i#*.}"; done
Я не уверен во всем, что происходит, и что должно происходить, но когда вы говорите
export snapshot_pw=snp_pw
вы устанавливаете переменную окружения snapshot_pw
в строку s
n
p
_
p
w
. Вы, вероятно, хотите сделать
export snapshot_pw="$snp_pw"
для установки переменной окружения snapshot_pw
к значению переменной snp_pw
, т. е. $snp_pw
.
Кроме того, вы должны указать переменную оболочки "$mail_log"
и любые другие, которые вы используете без кавычек. (Вам не нужны {
и }
.)
Минимальный тестовый пример показывает, что и bash
, и expect
считывают одну и ту же переменную окружения:
#!/bin/bash
export foo="bar$$"
echo "bash $foo"
expect <(cat <<'EOD'
puts "tcl $env(foo)"
EOD
)
который при запуске показывает одинаковые значения на обоих языках:
-bash-4.2$ bash mixin
bash bar7242
tcl bar7242
-bash-4.2$ bash mixin
bash bar7247
tcl bar7247
-bash-4.2$
поэтому неясно, что вы подразумеваете под «он не читает» и какова ваша общая цель для этого кода.
Вы можете установить переменную на основе содержимого файла с синтаксисом, подобным
snp_pw="$(cat passwd_file)"
напр.
$ cat passwd_file
anewpassword
$ cat x
#!/bin/bash
snp_pw=$(cat passwd_file)
echo Password is $snp_pw
$./x
Password is anewpassword