Чи можна зробити бутербродні псевдоніми?


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

3
Що означає "$ 1"? Я початківець і намагаюся навчитися, а не просто копіювати пасту і називати це щодня.
Джейсон Басанес

1
@JasonBasanese Я вдячний за ваше рішення :) $1вказує перший позиційний параметр або аргумент функції .. думайте про це як про спосіб введення функції або сценарію .. як і всі мови програмування, bashтакож це використовують .... ви знайти численні ресурси про це в Google ..
heemayl

3

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

На сторінці чоловіка Bash :

Псевдоніми

[...] Не існує механізму використання аргументів у тексті заміни. Якщо потрібні аргументи, слід використовувати функцію оболонки (див. ФУНКЦІЇ нижче).

Отже, вашою функцією може бути:

функція dim () {cd ~ jason / Документи; vim $ *; cd -;}


1
Чи не ~ / Документи не спрацюють у цьому випадку добре? Що також означають символи $ і * у цьому випадку? і це - після того, як потрібен компакт-диск? Зазвичай я можу просто набрати cd, і він йде в каталог.
Джейсон Басанес

"Зазвичай я можу просто ввести CD, і він піднімається в каталог", - я знаю лише звичайну інформацію, cdщоб перенести вас у ваш домашній каталог; cd ..йде на один рівень вгору. cd -перенесе вас до попереднього каталогу, з якого ви cdредагувались.
Chriki

1
@JasonBasanese: Так ~ / Документи працюватимуть для всіх (якщо це функція для всіх користувачів). $*це як $1 $2 $3...просто дати цілий список vim, а не перший аргумент, який ви вводите. І, як сказав Chriki, cd -повернеться до попереднього каталогу (до того, в якому ви були, коли ви викликали функцію).
CijcoSistems
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.