Bash関数の内容を読んで見る方法は? [コピー]

Bash関数の内容を読んで見る方法は? [コピー]

コマンドを使用すると、いつでも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" bazfoo somethingbar "$1" baz somethingbar 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、式をコマンドの末尾に配置することができます。これは、エイリアスが機能するために必要なものです。

関連情報