如果我想搜索系统中的文件,我使用以下命令:
sudo find `pwd` -name filename.ext
我想为像 这样的更简单的单词创建一个别名search
,所以我使用了以下命令:
alias search "find `pwd` -name "
问题是该命令将该pwd
部分转换为我现在所在的实际路径。当我只是输入alias
以查看别名列表时,我看到:
search find /path/to/my/homedir -name
我怎样才能避免这种情况?
答案1
使用单引号以避免定义时 shell 扩展
alias search='find `pwd` -name '
答案2
将命令修改为:
alias search="find . -name "
所以永远都会搜索仅在当前目录中,即当前工作目录
答案3
命令替换在 (t)csh (您似乎正在使用)中的双引号内展开,就像在类似 Bourne 的 shell 中一样。
所以在:
alias search "find `pwd` -name "
你实际上正在做类似的事情:
alias search 'find /some/dir -name '
运行/some/dir
该命令时当前目录在哪里。alias
在这里,您想要:
alias search 'find $cwd:q -name'
$cwd
自动设置tcsh
($PWD
在现代版本中也是如此,例如在 POSIX shell 中),因此您可以使用它来代替效率较低且可靠性较低的`pwd`
.
我们使用单(强)引号,这样$cwd
就不会在内部扩展。
$cwd:q
是将变量的值作为一个参数传递,而不是让它进行拆分。
另请注意,上面后面不需要空格-name
。
如果您想使用pwd
(例如,以便您获得当前工作目录的规范(无符号链接)路径,就像在某些实现中,例如不在环境中的pwd
GNU 实现中一样),您可以使用:POSIXLY_CORRECT
alias search 'find "`pwd`" -name'
但如果当前目录的路径包含换行符,则这将不起作用。
请注意,您不能使用sudo search
别名,因为别名仅在 (t)csh 中的命令位置展开。在 POSIX shell 中你可以这样做:
alias sudo='sudo '
告诉 shell 后面的单词sudo
也应该进行别名扩展,但这个技巧在 (t)csh 中不起作用。
POSIX sh
(或bash
/ zsh
/ ksh
...)等效项为:
alias search='find "$PWD" -name'
答案4
alias
一旦被调用就会被评估。调用别名时没有调用命令的选项。您必须编写一个 bash 函数,您可以在其中运行子命令,或者更好的是,使用.
(在当前目录中搜索)而不是“pwd”。