Создайте псевдоним для замены строки без $ VARIABLE в bash cli

Этот сценарий 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
3
12.05.2016, 03:51
3 ответа

Для конкретного случая использования 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 \$'
5
27.01.2020, 21:10

Такого механизма нет. Псевдонимы вроде как делают это, но они не работают как переменные. Расширение переменных должно быть помечено $ (что не так уж и много).

Имена хостов, в частности, могут быть псевдонимами несколькими способами:

  1. через /etc/host

    $ip|$target_hostname $hostalias
    
  2. через хост-файл пользовательского уровня, указанный в export HOSTALIASES=$the_hostfile

    $hostalias $ip|$target_hostname
    
  3. через dns

  4. через ваш конфигурационный файл ssh ('~/.ssh/config') (только для ssh):

    Host $hostalias
     HostName $target_hostname
    
2
27.01.2020, 21:10

Ну, в конкретном случае вашего примера, где значения, которые вы хотите сохранить, являются именами хостов, да, вы можете. Просто отредактируйте файл /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, это не так.

2
27.01.2020, 21:10

Теги

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