Bash别名帮助

时间:2011-03-07 21:04:11

标签: bash unix permissions alias

我正在为一个项目编写4个别名,目前其中两个正在工作。 e和ll别名有效,但cx别名给我一个错误cx:command not found。另外,我的rm别名只是删除了指定的文件,但没有给出任何形式的确认。

以下是我从这两个别名中寻找的内容..

  1. 一个名为“cx”的别名,它接受一个或多个文件/目录 并在指定的文件/目录上添加执行权限。

  2. 一个名为“rm”的别名,每次删除文件时都会显示一条确认消息。

  3. 这是我的别名......

    alias e="exit"
    alias ll="ls $1 -l"
    alias cx="chmod a+x $1"
    alias rm="rm -i"
    

3 个答案:

答案 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 ./fooll ./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命令添加到脚本中。