我希望这个问题的答案已经存在,但是我无法找到它。我浪费了太多时间搞乱这个。最好只是询问并继续前进。
我正在尝试创建一个(bash)shell脚本,在运行时将提示别名和替换字符串的名称,然后创建该别名。因此,作为工具棚中最尖锐的工具,我尝试(实际上从博客中复制)下面的代码。
#!/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'
我决定我对shell脚本定义的别名应该做的天真期望归结为纯文本替换。也就是说,如果我定义了一个名为的别名
对于example
echo '*.txt'
,当我使用它时,我希望结果为*.txt
在第一个答案中使用该方法可以做到这一点。第二个答案没有。所以我选择了第一个答案,接近我认为我正在寻找的东西。
感谢所有人!
答案 0 :(得分:1)
您可以使用eval:
~$ eval "alias lion='ls -la'"
~$ lion
total 2393924
其他一些例子:
~$ a=findtxt
~$ b="find . -name '*.txt'"
~$ eval "alias $a='$b'"
答案 1 :(得分:1)
你得到的是单引号:
alias $SHORTTEXT='$LONGTEXT'
的需求。如果您希望展开$LONGTEXT
,请使用:
alias $SHORTTEXT="$LONGTEXT"