bashrc里alias加参数如何做?

sh/bash/dash/ksh/zsh等Shell脚本
回复
wanzihrg
帖子: 223
注册时间: 2008-03-15 10:34

bashrc里alias加参数如何做?

#1

帖子 wanzihrg » 2008-09-06 21:58

我在~/.bashrc加上了这行:

代码: 全选

alias k="kwrite $1 > /dev/null 2>&1 &"
目的是希望当我在终端输入k 1.c的时候就能建立一个名为1.c的文件并用kwrite打开,可是输出却是:
bash: 1.c: command not found 并同时打开一个kwrite,而不是默认的建立了一个1.c再打开

而直接在命令行输入kwrite 1.c > /dev/null 2>&1 & 却可以,请问应该怎么搞?

PS:要是用

代码: 全选

alias k="kwrite $1"
也可以,但是这样编辑的时候kwrite会在终端输出一些信息,我不希望它输出,也就是说,直接输入k 1.c就可以在后台打开并不输出任何信息,不用输入kwrite 1.c > /dev/null 2>&1 &这么长一串
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

#2

帖子 yjcong » 2008-09-06 22:18

alias 好像不能加参数。 你可以写成script

代码: 全选

#!/bin/bash
kwrite $1 > /dev/null 2>&1 &
然后保存为$HOME/k, chmod 755 k
在bashrc里, alias k='$HOME/k'
---------------
其实你直接在终端里输入kwrite 1.c & 即可
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
wanzihrg
帖子: 223
注册时间: 2008-03-15 10:34

#3

帖子 wanzihrg » 2008-09-06 23:11

alias 是可以加参数,例如 alias ff='find . -name $1' ,然后终端输入 ff filename 就能搜索该文件了,但是一旦后面加上 > /dev/null 2>&1 & 就不正常了,把输入的filename 当作另一个命令了

yjcong的两种方法也不行,每次编辑kwrite里的文件还是会从终端输出信息,没有像-quite这样的选项
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#4

帖子 eexpress » 2008-09-06 23:17

2>&1干嘛
不是要看出错信息?
● 鸣学
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

#5

帖子 yjcong » 2008-09-07 0:56

wanzihrg 写了:alias 是可以加参数,例如 alias ff='find . -name $1' ,然后终端输入 ff filename 就能搜索该文件了,但是一旦后面加上 > /dev/null 2>&1 & 就不正常了,把输入的filename 当作另一个命令了

yjcong的两种方法也不行,每次编辑kwrite里的文件还是会从终端输出信息,没有像-quite这样的选项
原来你是不想要终端输出的信息啊。 我记得用gnome的时候, 可以Alt+F2然后再里面输入命令。这样, 你就看不到终端的信息了。 至于kde应该有类似的功能吧
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京

#6

帖子 aBiNg » 2008-09-08 21:58

印象中没见 alias 的命令可以带位置参数的。$1 本就是空,此时有:

代码: 全选

command $1 foo == command foo
所以,alias k="kwrite $1",这个只是假象。1.c 并未传给 $1。
wanzihrg
帖子: 223
注册时间: 2008-03-15 10:34

#7

帖子 wanzihrg » 2008-09-14 5:17

alias的$1的确是假象...

就不知道怎么方便快捷地在终端从后台打开程序了
头像
alinmn
帖子: 185
注册时间: 2006-05-19 21:42
来自: NIT

#8

帖子 alinmn » 2008-09-15 12:59

代码: 全选

function k()
{
kwrite $1 > /dev/null 2>&1 & 
}
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

#9

帖子 aerofox » 2008-09-16 21:30

需要加参数时,还是用 function 方便,就象楼上的一样。
csh 的 alias 是支持参数的。
wanzihrg
帖子: 223
注册时间: 2008-03-15 10:34

#10

帖子 wanzihrg » 2008-09-17 1:05

感谢楼上各位提示!
xiaoehaier
帖子: 117
注册时间: 2011-01-16 17:14

Re: bashrc里alias加参数如何做?

#11

帖子 xiaoehaier » 2013-05-08 23:09

可以加参数,alias echosth=“echo $1”

试 echosth hello
输出 hello
okay456okay
帖子: 1
注册时间: 2007-02-06 19:34

Re: bashrc里alias加参数如何做?

#12

帖子 okay456okay » 2015-08-27 15:46

alias不支持参数,可以曲线救国,这样搞:
alias dosomethig='test() { echo $1;}; test'
starpalace
帖子: 2
注册时间: 2020-04-28 2:35
系统: Ubuntu

Re: bashrc里alias加参数如何做?

#13

帖子 starpalace » 2020-04-28 2:41

alias k="kwrite $1" 你这种写法,看起来没错,其实主要问题在于,在alias命令执行时 $1 过早的生效,此时的 $1 是空
想真正传参,其实是想让命令 kwrite 执行时 $1 才生效。
很简单,这么改一下:
alias k='kwrite $1'
就是把双引号改成单引号,这样保证 $1 原样输出,那么 kwrite 才得到了 $1
starpalace
帖子: 2
注册时间: 2020-04-28 2:35
系统: Ubuntu

Re: bashrc里alias加参数如何做?

#14

帖子 starpalace » 2020-04-28 2:51

如果你非要用双引号来定义alias,还想传参,很简单,记得把 $ 转义,即 \$
回复