我正在为一个项目编写4个别名,目前其中两个正在工作。 e和ll别名有效,但cx别名给我一个错误cx:command not found。另外,我的rm别名只是删除了指定的文件,但没有给出任何形式的确认。
以下是我从这两个别名中寻找的内容..
一个名为“cx”的别名,它接受一个或多个文件/目录 并在指定的文件/目录上添加执行权限。
一个名为“rm”的别名,每次删除文件时都会显示一条确认消息。
这是我的别名......
alias e="exit"
alias ll="ls $1 -l"
alias cx="chmod a+x $1"
alias rm="rm -i"
答案 0 :(得分:4)
当你想使用传入的参数时,你不需要别名,你想要一个函数
cx(){ chmod a+x $1; }
ll(){ ls $1 -l; }
在这些特殊情况下,您可以完全不使用位置参数,因为参数位于最后,并且别名基本上用其定义内联替换。
alias ll='ls -l'
alias cx='chmod a+x'
所以cx ./foo
现在是chmod a+x ./foo
而ll ./foo
现在是ls -l ./foo
$ touch foo && ls -l ./foo
-rw-rw-r-- 1 siegex siegex 0 Mar 7 12:14 ./foo
$ alias cx='chmod a+x'
$ alias ll='ls -l'
$ cx ./foo
$ ll ./foo
-rwxrwxr-x 1 siegex siegex 0 Mar 7 12:14 ./foo
答案 1 :(得分:0)
试试这个,它应该更好:)
alias e='exit'
alias ll='ls $1 -l'
alias cx='chmod a+x $1'
alias rm='rm -i'
魔术是'而不是'
答案 2 :(得分:0)
命令shopt -s expand_aliases
将允许在非交互式Bash shell中进行别名扩展。 (在命令行中不需要它,因为那将是一个交互式shell。)
如果您在脚本中测试别名,那可能是您问题的一部分。
在尝试运行任何别名命令之前,请尝试将shopt
命令添加到脚本中。