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