2016-06-14 68 views
0

我想为ls -rt制作一个快捷功能,但在我的定义中,Unix不接受-rt。为什么这不工作?解决办法是什么?这个bash函数为什么不起作用?

lsr() {ls -rt $1;} 
+1

一旦我修复了语法问题,在这里可以正常工作。 –

+0

我试图按照我先前创建的快捷方式的语法:'mkd(){mkdir $ 1; cd $ 1;}' – kilojoules

+2

你缺少括号后的空格。你可能也想考虑一个别名。 –

回答

4

你的具体问题是,你需要空格左括号后,如(引用正确使用所有参数以及)

lsr() { ls -rt "[email protected]"; } 

但你可能还需要考虑的一个因为这种别名是在命令开始替代:

alias lsr='ls -rt' 

这一点,毕竟,有多少系统给你非常方便“LON摹LS”的东西,如:

alias ll='ls -al' 

你只需要确保这是出现在一些需要这就是所谓的特定情况下,比如在.bashrc在交互shell,或者在源文件脚本本身的开始(并确保别名使用shopt -s expand_aliases进行扩展)。这是两种可能性,但毫无疑问是其他。

+0

我只是在想它,并发现你说的正是我在想什么:D干杯 –

+0

正确诊断OP的问题,好的提示别名,但最后一段令人困惑:运行在_noninteractive_ shell中的脚本不能读取'。 bashrc';即使他们这样做了,除非您事先运行'shopt -s expand_aliases',否则别名不会在脚本内部扩展。没有_sourced_的脚本在正好是shell_的_child进程中运行,它不同于_subshel​​l_(当前shell环境的克隆)。 – mklement0

+1

@ mklement0,调整了最后一段,使其更像是“要注意的东西”,而不是“这正是如何去做”。考虑到bash使用大量配置文件类型文件的复杂性,任何全面的信息可能会减少答案的大小,因为它与答案本身是相切的(并且问题已被封闭为简单拼写错误),可能不需要:-) – paxdiablo

2

{

lsr() { ls -rt $1;}

2

添加空格莫非后的第一个 “{” 丢失的空间?

# bash --version 
GNU bash, version 4.3.42(1)-release (i686-pc-linux-gnu) 
Copyright (C) 2013 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 

This is free software; you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. 
# 
# touch a 
# touch b 
# touch c 
# ls -rt 
a b c 
# ls -t 
c b a 
# 
# lsr() {ls -rt;} 
bash: syntax error near unexpected token `{ls' 
# lsr() { ls -rt;} 
# lsr 
a b c 
2

正如已指出的,{必须跟着空白函数定义工作。

shellcheck.net是语法检查shell代码一个伟大的网站,这本来是可以赶上的问题

lsr() {ls -rt $1;} 
     ^-- SC1054: You need a space after the '{'. 
       ^-- SC2086: Double quote to prevent globbing and word splitting. 

正如你所看到的,它不仅发现了这个问题,而且还提供了有用的建议要双引号$1,以便使参数能够与带有嵌入空格和全局字符的文件名一起工作。

至于为什么需要{后的空白:

{是所谓外壳关键字的实例,而不是所谓的shell字符| & ; () < > space tab

元字符单独的词在分析过程中,关键字做

在手边的情况下,在该{ls{识别为壳关键字,因为它不被识别为一个单独的由于立即被随后ls

因此,Bash看到单个词{ls,这在这个位置是出乎意料的,并恰当地报告了syntax error near unexpected token '{ls'

注意,右}需要前面的空白(即使你可能需要添加它视觉对称),因为它是由元字符;之前,它被定义公认的“自己的东西“,并因此隐含地导致}被识别为它自己的单词。

在一个相关的说明:自闭合}是在同一行作为ls命令时,ls命令必须与控制操作员;终止 - 否则,}将被解释为另一参数ls