パイプ(|)を変数に格納する方法は?


12

アイデアは、それを...コマンドのパイプとして使用することです。たとえば、何度もタイプし直さなければならないある種の長いパスがあり、その後にパイプと2番目のプログラムが続くとします。

"directory1/directory2/direcotry3/file.dat | less -I "

その部分を変数に格納したいので、次のように使用できます。

r="directory1/directory2/direcotry3 \| less -I -p "
$ cat path1/path2/$r <searchterm>

代わりに、私は得る

cat: invalid option -- I
Try `cat --help' for more information.

...パイプが明らかに機能しなかったことを意味します。


1
できますがeval、通常は関数を作成します。
frostschutz 2013

回答:


21

変数を展開した後、bashはコマンドラインを完全には再解釈しません。これを強制するにはeval、前に置きます:

r="directory1/directory2/direcotry3/file.dat | less -I "
eval "cat path1/path2/$r"

それにもかかわらず、これを行うためのよりエレガントな方法があります(エイリアス、関数など)。


8

コードとデータを混在させようとしているが、これは良い考えではない。代わりに、ファイル(ディレクトリ?)名を引数として取り、それをで表示する関数を定義しlessます。

view () {
    less -I -p "$2" $1
}

view directory1/directory2/directory3 <searchterm>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.