Этот сценарий bash
будет использовать grep
для извлечения строк, начинающихся с Content:
, удалите начальную строку «Content : "используя функции управления строками bash
и сохраните каждую строку как элемент массива:
#!/bin/bash
declare -a array=()
while read line; do
array+=("${line##Content:}")
done < <(grep "^Content:" file)
# Display array elements
for a in "${array[@]}"; do
echo "CONTENT: " $a
done
Для конкретного случая использования SSH можно использовать псевдонимы в ~ / .ssh / config
. Это способ сокращения параметра хоста и набора параметров до SSH. Они не только не требуют предшествующего $
, но они не будут использоваться в контекстах, которые не требуют имен хостов, доступ к которым осуществляется через SSH, и они будут использоваться в других контекстах, которые требуют имен хостов. доступ через SSH, такой как SSHFS, rsync и т. д.
Host r1
HostName remote_server_1
UserName vassilis
Host r2
HostName remote_server_2
UserName vp
Host r2test
HostName remote_server_2
UserName guest
Для других случаев использования, когда фактически вызывается псевдоним в командной строке, zsh имеет глобальные псевдонимы, определенные с помощью alias -g
. В Баше такого нет.
alias -g r1=remote_server_1
ssh r1
Основная проблема с глобальными псевдонимами заключается в том, что они срабатывают где угодно, даже если они не имеют смысла.
% echo r1
remote_server_1
Но они не сработают, если являются частью слова, поэтому scp r1: / some / path.
не сработает.
Если вы хотите, чтобы что-то работало где угодно в командной строке оболочки, определите переменную и введите $
. Если на клавиатуре действительно сложно печатать, можно сопоставить ее с более доступной клавишей. Например, чтобы заставить M-v
вставить $
, поместите это в свой .bashrc
:
readline_insert () {
READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}${1}${READLINE_LINE:$READLINE_POINT:}"
((READLINE_POINT += ${#1}))
}
bind -x '\ev: readline_insert \$'
Такого механизма нет. Псевдонимы вроде как делают это, но они не работают как переменные. Расширение переменных должно быть помечено $
(что не так уж и много).
Имена хостов, в частности, могут быть псевдонимами несколькими способами:
через /etc/host
$ip|$target_hostname $hostalias
через хост-файл пользовательского уровня, указанный в export HOSTALIASES=$the_hostfile
$hostalias $ip|$target_hostname
через dns
через ваш конфигурационный файл ssh ('~/.ssh/config') (только для ssh):
Host $hostalias
HostName $target_hostname
Ну, в конкретном случае вашего примера, где значения, которые вы хотите сохранить, являются именами хостов, да, вы можете. Просто отредактируйте файл /etc/hosts
и добавьте эти строки:
build_server_r1 r1
build_server_r2 r2
Теперь вы можете запустить:
ssh r1
scp r1:/path/to/file .
Будет ли работать my_script.sh r1
или нет, зависит от вашего скрипта. Если вы пытаетесь подключиться к серверу, он, вероятно, будет работать. Если вам нужно r1
для расширения до строки remote_server_1
, это не так.