Сценарий оболочки: сократить или создать псевдоним адреса после команды

Я хочу сокращать или устанавливать псевдоним для адреса назначения каждый раз, когда я использую его при копировании файлов. Например,

scp <myfile> my_destination 

где my_destination может быть hbaromega@192.168.1.100:Documents, Поэтому я хочу изменить мой.bash_profile, вставив что-то вроде

alias my_destination = 'hbaromega@192.168.1.100:Documents' .

Но это не работает с my_destination это не команда.

Есть ли выход?

Примечание. Я не хочу сокращать всю команду, а только ее адрес, чтобы использовать ее с другими возможными командами.

4 ответа

Вы не можете делать то, что хотите, по той причине, которую вы указали (псевдоним определяет всю команду). Но вы можете использовать функцию оболочки, чтобы приблизиться:

my_scp() {
  scp "$@" hbaromega@192.168.1.100:Documents/.
}

который вы могли бы затем назвать

my_scp *.c

(Использование $@ в двойных кавычках - это черная магия оболочки, которая позволяет избежать проблем, если любое из имен файлов, совпадающих с глобусом *.c, содержит пробелы)

Конечно, если вы не хотите определять функцию, вы всегда можете использовать переменную оболочки, чтобы хотя бы сохранить повторный ввод:

dest='hbaromega@192.168.1.100:Documents/.'
scp *.c $dest

Я думаю, что это работает без использования export так как в любом случае я назначаю переменную для пути или пункта назначения. Поэтому я могу просто добавить следующее в мой.basrc или.bash_profile:

my_destination='hbaromega@192.168.1.100:Documents/'

затем

scp <myfile> $my_destination 

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

local_dest='/Users/hbaromega/Documents/' 

а потом

mv <myfile>  $local_dest 

Таким образом, адрес назначения может быть задан как переменная, но не как команда или функция оболочки.

У вас есть пара вариантов. Вы можете установить псевдонимы хоста в вашем ~/.ssh/config как это:

Host my_destination
  Hostname 192.168.1.100
  User hbaromega

Вы можете использовать это так:

$ scp myfile my_destination:Documents/

Обратите внимание, что вам все равно придется указать каталог по умолчанию.

Другой вариант будет просто поместить переменную окружения в ваш ~/.bashrc:

export my_destination='hbaromega@192.168.1.100:Documents/'

Тогда вы можете использовать это так:

$ scp myfile $my_destination

Подход BertD к определению функции также подойдет.

Причина, по которой это не работает, заключается в том, что вокруг = знак. Как указывалось, псевдоним должен называться первой частью командной строки. Вы с большей вероятностью получите нужные результаты, экспортируя my_destination а затем позвонив с $, В ~/.bashrc:

export my_destination='hbaromega@192.168.1.100:Documents'

Затем:

scp <myfile> $my_destination

Примечание: вам, вероятно, потребуется указать полный путь к Documents в экспорте.

Другие вопросы по тегам