アイデアは...コマンドでパイプとして使用することです。たとえば、何度も何度も何度も入力する必要がある長いパスがあり、パイプと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
bashは変数を展開した後にコマンドラインを完全に再解釈しません。これを強制するには、次をeval
前に置きます。
r="directory1/directory2/direcotry3/file.dat | less -I "
eval "cat path1/path2/$r"
それにもかかわらず、これを行うよりエレガントな方法(エイリアス、関数など)があります。
答え2
コードとデータを混在させようとしていますが、これは良い考えではありません。代わりに、ファイル(ディレクトリ?)名を引数として使用する関数を定義しますless
。
view () {
less -I -p "$2" $1
}
view directory1/directory2/directory3 <searchterm>