Я ожидаю, что ответ на этот вопрос уже где-то здесь, но я не смог его найти.Я трачу слишком много времени, возиться с этим.Лучше всего просто спросить и двигаться дальше.
Я пытаюсь создать сценарий оболочки (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
Использование метода в первом ответе делает это.Второго ответа нет.Поэтому я выбрал первый ответ как более близкий к тому, что, я думаю, я искал.
Спасибо всем!