Invalid grep
execute the following command:
ps aux | grep-n redis-server | grep-v grep
the process information of redis-server can be found normally.
(Note: grep-v grep is to exclude the process information of grep itself from the results)
but write it as an alias:
alias pg= "ps aux | grep-n $@ | grep-v grep"
,
then execute:
pg redis-server
prompt as follows:
grep: redis-server: No such file or directory
could you tell me what"s wrong? Thank you!
just change the order
alias pg='ps aux|grep -v grep| grep -n $@'
for $@
, the symbol is followed by a parameter
$ alias pg="ps aux|grep -n $@|grep -v grep"
$ set -x -sharpbash
PP update_terminal_cwd
PP local url_path=
...
$ pg abc
+ ps aux
+ grep -n
+ grep -v grep abc
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
[-e pattern] [-f file] [--binary-files=value] [--color=when]
[--context[=num]] [--directories=action] [--label] [--line-buffered]
[--null] [pattern] [file ...]
grep: abc: No such file or directory
PP update_terminal_cwd
PP local url_path=
as you can see, the result of pg abc
execution is
ps aux
grep-n
grep-v grep abc
that is, grep-v grep
is also part of the $@
representation and is replaced by bash parsing.
in fact, you can't do this simply because you use double quotes. When you use double quotes, the position function $@
has already been expanded in alias. Of course, the value cannot be passed in. Try changing it to single quotes.
pot, pot, really not ha, last night at home can not verify, a little take it for granted. Come to the company in the morning ~ so let's explore why it doesn't work.
there is a sentence about position parameters in the man document of bash:
The positional parameters are temporarily replaced when a shell function is executed (see Shell Functions).
when the shell function executes, the position parameter is temporarily replaced
that is, when no function is called, the position variable is always the parameter passed when bash is started, and the default value is null.
in the answer of the brother upstairs, the position parameter is also valid without using the position parameter
alias pg='ps aux|grep -v grep| grep -n'
if you want to use position parameters, you can use functional writing, or use functions to write aliases. source
and then use
directly.
-sharp .bashrc
pg(){ ps aux|grep -n $@ | grep -v grep; }
-sharp
alias pg='f(){ ps aux | grep -n $@ | grep -v grep;}; f'
of course, change the position directly, and the way you write it to the brother upstairs is also OK.