Як уникнути команд у псевдонімі bashrc?


6

Мені потрібно час від часу торкатися до файлу з поточною міткою часу як іменем файлу. Я зробив би це так:

touch `date "+%Y-%m-%d_%H-%M"`.txt

Однак я хотів би визначити псевдонім для цього. Коли я намагаюся додати до bashrc це:

alias td="touch `date \"+%Y-%m-%d_%H-%M\"`.txt"

Результат полягає в тому, що ім'я файлу однакове протягом усього сеансу, оскільки `date ..` обчислюється лише один раз під час входу в систему ...

Як я можу отримати команду розширюватися лише тоді, коли я дзвоню псевдонім? Або я повинен використовувати для цього функцію?

Дякую

Відповіді:


6

Оболонка розширює командний рядок, що містить aliasкоманду, і передає щось подібне td=touch 2010-09-17_21-54.txtдо aliasкоманди. Вам потрібно захистити спеціальні символи у визначенні псевдоніму від розширення. Найпростіший спосіб - використовувати одинарні замість подвійних лапок:

alias td='touch `date "+%Y-%m-%d_%H-%M"`.txt'

Тоді tdє псевдонімом за touch `date "+%Y-%m-%d_%H-%M"`.txtбажанням.

Хоча це тут не проблема, я рекомендую використовувати $(…)замість цього `…`, щоб уникнути складнощів із складними командами (у зворотних котируваннях є приховані та нерепортажні правила цитування, тоді як дужки в доларах працюють інтуїтивно):

alias td='touch $(date "+%Y-%m-%d_%H-%M").txt'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.