Можно ли сделать сэндвичами какие псевдонимы?

8

Я ищу способ заставить следующий псевдоним работать для любого имени файла.

alias dim='cd /home/jason/Documents; vim *the desired file*; cd'

Мне интересно, есть ли способ, которым я мог бы изменить этот псевдоним, чтобы я мог ввести любое имя файла как таковое:

dim *the desired file*

И все же получить тот же результат. В принципе, есть ли способ вызвать то, что введено после псевдонима, в сам псевдоним? Что-то вроде:

alias dim='cd /home/jason/Documents; vim <what is typed after alias>; cd'
Джейсон Басанезе
источник
// Какова была цель этого?
Натан Басанезе

Ответы:

8

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

Вот простая функция для выполнения работы:

dim() {
cd /home/jason/Documents
vim "$1"
cd
}

Функция dimпримет имя файла в качестве аргумента. Вы можете поместить этот фрагмент кода в конец вашего ~/.bashrcфайла, а затем запустить его как:

dim file.txt

Замените file.txtна любое имя файла, которое вы хотите.

Для того, чтобы запустить его из текущего сеанса оболочки, sourceв ~/.bashrcфайл первым:

. ~/.bashrc
heemayl
источник
3
Что означает «1 доллар»? Я начинающий и пытаюсь учиться, а не просто копировать вставить и назвать это день.
Джейсон Басанезе
1
@JasonBasanese Я ценю ваше решение :) $1указывает на первый позиционный параметр или аргумент функции .. думаю, это как способ ввода функции или скрипта .. как и все языки программирования, bashтакже использует это .... вы будете найти многочисленные ресурсы об этом в Google ..
Heemayl
3

Не с псевдонимами, используйте функции вместо.

Со страницы руководства Bash :

Алиасы

[...] Механизм использования аргументов в тексте замены отсутствует. Если требуются аргументы, следует использовать функцию оболочки (см. Ниже ФУНКЦИИ ).

Таким образом, ваша функция может быть:

function dim () {cd ~ jason / Documents; vim $ *; компакт диск - ;}

CijcoSistems
источник
1
Разве ~ / Документы не будут работать нормально в этом случае? Кроме того, что означают символы $ и * в этом случае? и - после компакт-диска нужно? Обычно я могу просто ввести cd, и он идет вверх по каталогу.
Джейсон Басанезе
«Обычно я могу просто набрать cd, и он идет вверх по каталогу» - я знаю только простой способ cdпривести вас в ваш домашний каталог; cd ..поднимается на один уровень вверх. cd -приведет вас к предыдущему каталогу, из которого вы cdредактировали.
Чрики
1
@JasonBasanese: Да ~ / Документы будут работать для всех (если это функция для всех пользователей). $*все равно что $1 $2 $3...просто передать весь список vim, а не первый введенный вами аргумент. И, как сказал Чрики, cd -вернется в предыдущий каталог (тот, которым вы были, когда вызывали функцию).
CijcoSistems