コマンドを使用すると、いつでもalias
値を表示できますalias
。
wolf@linux:~$ alias al='grep "$1" file.txt'
wolf@linux:~$ alias al
alias al='grep "$1" file.txt'
wolf@linux:~$
残念ながら、grep
エイリアスでは機能しません。何が間違っているのかわかりません。問題や解決策をご存知の方は教えてください。
wolf@linux:~$ al
random text
abc def jkl
random text
abc ghi jkl
random text
wolf@linux:~$
wolf@linux:~$ al abc
file.txt:random text
file.txt:abc def jkl
file.txt:random text
file.txt:abc ghi jkl
file.txt:random text
grep: abc: No such file or directory
wolf@linux:~$
だから関数を使うことにしました。
wolf@linux:~$ func(){ grep "$1" file.txt; }
wolf@linux:~$ func
random text
abc def jkl
random text
abc ghi jkl
random text
wolf@linux:~$
効果がある
wolf@linux:~$ func abc
abc def jkl
abc ghi jkl
wolf@linux:~$
しかし、別の問題が発生しました。いくつかの関数を定義しましたが、その内容を忘れました。
alias al
上記のコマンドに似た関数の内容を見る方法はありますか?
答え1
type NAME
(またはtype -a NAME
同じ名前で複数のコマンドが定義されている場合)、次の操作を行います。
$ func(){ grep "$1" file.txt; }
$ type func
func is a function
func ()
{
grep --color=auto "$1" file.txt
}
答え2
関数が実行されるコードを表示しますset
。
$1
エイリアス内では機能しないため、エイリアスは機能しません。エイリアスは単なるテキスト置換であり、機能ではありません。したがって、別名がある場合
alias foo='bar "$1" baz'
その後、foo
コマンドラインに入力すると、シェルは入力したように機能しますbar "$1" baz
。foo something
bar "$1" baz something
bar something baz
答え3
これはトピックから逸脱した答えです。grep
エイリアスが機能なしで機能するようにします。
以下で借りて角色しました。このスタックオーバーフロー投稿:
alias al='grep file.txt -f - <<<'
それから:
$ cat file.txt
aaa
bbb
ccc
$ al a
aaa
-f -
grepにファイルの式を使用するように指示しますが、ここではファイルなので、-
stdinから式を読みます。次に、bash here-stringを使用して文字列の内容を標準入力にリダイレクトします。これによりgrep
、式をコマンドの末尾に配置することができます。これは、エイリアスが機能するために必要なものです。