Как я могу использовать скрипт bash для определения псевдонима из пользовательского ввода? - PullRequest
0 голосов
/ 18 марта 2012

Я ожидаю, что ответ на этот вопрос уже где-то здесь, но я не смог его найти.Я трачу слишком много времени, возиться с этим.Лучше всего просто спросить и двигаться дальше.

Я пытаюсь создать сценарий оболочки (bash), который при запуске запрашивает имя псевдонима и строку замены, а затем создает этот псевдоним.Поэтому, будучи не самым острым инструментом в сарае инструментов, я попробовал (скопировал из блога) приведенный ниже код.

#!/bin/bash
echo "Enter the identifier for the alias (shortcut)"
read SHORTTEXT
echo "Now enter the string which $SHORTTEXT will alias:"
read LONGTEXT
alias $SHORTTEXT='$LONGTEXT'

Я поместил приведенный выше код в файл ~/scripts/nojoy.sh, сделал файлисполняемый файл, а затем опробовал его.

myid@myid:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 11.10
Release:    11.10
Codename:   oneiric
myid@myid:~$
myid@myid:~$ . ~/scripts/nojoy.sh 
Enter the identifier for the alias (shortcut)
testit
Now enter the string which testit will alias:
cd ~
myid@myid:~$ alias testit
alias testit='$LONGTEXT'

Затем я трачу больше времени, чем допускаю, пытаясь изменить явно просто неверный
alias $SHORTTEXT='$LONGTEXT'
во что-то, что когдазапуск сценария приведет к созданию
alias testit='cd ~'
при запуске сценария.

Я сдаюсь.Может кто-нибудь, пожалуйста, просто объясните мне, как это сделать, чтобы я мог заняться чем-то более важным, чем это?(Может быть, как чистить ящики для мусора?)


Обновление:

Я не ожидал, что мне будет трудно найти ответ на этот вопрос.Но оба ответа работают, хотя и по-разному, и я не уверен, что ценю какие-либо тонкости.

Использование alias $SHORTTEXT="$LONGTEXT" в моем файле сценария вместе со строкой ввода
find . -name '*.txt'
привело к
alias test='find . -name '\''*.txt'\'''

Использование eval "alias $SHORTTEXT='$LONGTEXT'" привело к
alias test='find . -name *.txt'

Я решил, что мое наивное ожидание того, что псевдоним мой сценарий оболочки долженсделать сводится к чистой замене текста.То есть, если бы я определил псевдоним с именем example для echo '*.txt', тогда, когда я использовал его, я ожидал бы, что результат будет *.txt

Использование метода в первом ответе делает это.Второго ответа нет.Поэтому я выбрал первый ответ как более близкий к тому, что, я думаю, я искал.

Спасибо всем!

Ответы [ 2 ]

1 голос
/ 18 марта 2012

То, что вы получаете, это то, что в одинарных кавычках:

alias $SHORTTEXT='$LONGTEXT'

спрос. Если вы хотите $LONGTEXT расширить, используйте:

alias $SHORTTEXT="$LONGTEXT"
1 голос
/ 18 марта 2012

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

~$ eval "alias lion='ls -la'"
~$ lion
total 2393924

Другой пример:

~$ a=findtxt
~$ b="find . -name '*.txt'"
~$ eval "alias $a='$b'"
...