对 bash 脚本来说还很陌生。尝试将 ls -la 命令改写为:ls -la | more
(对我来说似乎更有用)。
我把这个添加到我的末尾.bashrc
。
154 # alias 'ls -la'='ls -la | more'
155 # this did not work because aliases
156 # are not allowed to have spaces in
157 # them. => have to make function:
158 ls() {
159 if [[ $@ == "-la" ]];
160 then
161 echo "test";
162 command ls -la | more;
163 else
164 command ls "$@";
165 fi;
166 }
但是当我打开一个新终端时出现此错误:
bash: /users/me/.bashrc: line 158: syntax error near unexpected token `('
bash: /users/me/.bashrc: line 158: `ls() {'
当我添加function
之前的内容时ls() {
,没有任何投诉,但 ls 行为没有任何变化。谢谢。
更新
为了缩小问题范围,我这样做了:
159 ls() {
160 #if [[ $@ == "-la" ]];
161 # then
162 echo "test"
163 # command ls -la | grep vim;
164 #else
165 # command ls "$@";
166 #fi;
167 }
但我仍然得到同样的错误。我认为主要问题可能是它在bashrc文件中?
更新
奇怪的是,这有效
159 function ls() {
160 #if [[ $@ == "-la" ]];
161 # then
162 echo "test"
163 # command ls -la | grep vim;
164 #else
165 # command ls "$@";
166 #fi;
167 }
答案1
我无法在 Solaris 10 或 Cygwin 上的 Bash-3.00.16 上重现这个问题,但看起来你的 bash 将第 158 行解析为命令的调用ls
,而不是函数定义。
“function”前缀是可选的,但如果它能让你的 bash 接受定义,那么这是一个合理的解决方法。它不会以任何方式改变函数的含义。
顺便问一下,您使用哪个操作系统和 Bash 版本?
uname -a
bash --version
答案2
我知道这不是您要问的,但我提到它以防您没有考虑过这种解决方案。根据我的经验,解决这个问题的通常方法是创建一个没有空格的别名,例如:
alias llm="ls -la | more"
这比编写脚本要快得多,也容易得多。FWIW,我在运行 Bash 3.0 的 FreeBSD 5.3 系统上对此进行了测试,它提供了更多列表。
答案3
用。。。来代替:
函数 ls { 如果 [[ $@ == "-la" ]] 然后 回显“测试” /bin/ls -la | 更多 别的 /bin/ls“$@” 科幻; }
注意:您需要在 if 中引用实际 ls 命令的绝对路径,否则将重新调用相同的函数......stackoverflow!:-)
编辑:是的,命令关键字是防止别名查找的更好方法。