Exportez plusieurs options dans $ GREP_OPTIONS

J'utilise ZSH avec "OH MY ZSH".

Dans la variable "OH MY ZSH" $GREP_OPTIONS exporte avec plusieurs valeurs:

 $ echo $GREP_OPTIONS --color=auto --exclude-dir=.cvs --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn 

Mais quand j'essaie d'utiliser grep je vois l'aide pour grep .

Si je règle $GREP_OPTIONS avec une seule valeur, tout fonctionne bien

 $ export GREP_OPTIONS='--color=auto' $ ls -l ~/ | grep .zsh drwxr-xr-x 11 petr petr 4096 Sep 10 09:23 .oh-my-zsh drwxr-xr-x 4 petr petr 4096 Sep 24 13:10 .zsh lrwxrwxrwx 1 petr petr 19 Sep 22 12:24 .zshenv -> /home/petr/.zsh/env -rw-r--r-- 1 petr petr 5141 Sep 23 10:31 .zshrc -rw-r--r-- 1 petr petr 17 Sep 24 12:19 .zsh-update 

Je travaille dans Tmux. Mais en terminal pur il se produit également.

Ma configuration ZSH sur mon GitHub .

UPDATE Exemple.

Définir plusieurs options de grep :

 $ export GREP_OPTIONS='--color=auto --exclude-dir=.git' $ ls -al ~/ | grep zsh Usage: grep [OPTION]... PATTERN [FILE]... Search for PATTERN in each FILE or standard input. PATTERN is, by default, a basic regular expression (BRE). Example: grep -i 'hello world' menu.h main.c Regexp selection and interpretation: -E, --extended-regexp PATTERN is an extended regular expression (ERE) -F, --fixed-ssortingngs PATTERN is a set of newline-separated fixed ssortingngs -G, --basic-regexp PATTERN is a basic regular expression (BRE) -P, --perl-regexp PATTERN is a Perl regular expression -e, --regexp=PATTERN use PATTERN for matching -f, --file=FILE obtain PATTERN from FILE -i, --ignore-case ignore case distinctions -w, --word-regexp force PATTERN to match only whole words -x, --line-regexp force PATTERN to match only whole lines -z, --null-data a data line ends in 0 byte, not newline Miscellaneous: -s, --no-messages suppress error messages -v, --invert-match select non-matching lines -V, --version print version information and exit --help display this help and exit --mmap deprecated no-op; evokes a warning Output control: -m, --max-count=NUM stop after NUM matches -b, --byte-offset print the byte offset with output lines -n, --line-number print line number with output lines --line-buffered flush output on every line -H, --with-filename print the file name for each match -h, --no-filename suppress the file name prefix on output --label=LABEL use LABEL as the standard input file name prefix -o, --only-matching show only the part of a line matching PATTERN -q, --quiet, --silent suppress all normal output --binary-files=TYPE assume that binary files are TYPE; TYPE is 'binary', 'text', or 'without-match' -a, --text equivalent to --binary-files=text -I equivalent to --binary-files=without-match -d, --directories=ACTION how to handle directories; ACTION is 'read', 'recurse', or 'skip' -D, --devices=ACTION how to handle devices, FIFOs and sockets; ACTION is 'read' or 'skip' -r, --recursive like --directories=recurse -R, --dereference-recursive likewise, but follow all symlinks --include=FILE_PATTERN search only files that match FILE_PATTERN --exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN --exclude-from=FILE skip files matching any file pattern from FILE --exclude-dir=PATTERN directories that match PATTERN will be skipped. -L, --files-without-match print only names of FILEs containing no match -l, --files-with-matches print only names of FILEs containing matches -c, --count print only a count of matching lines per FILE -T, --initial-tab make tabs line up (if needed) -Z, --null print 0 byte after FILE name Context control: -B, --before-context=NUM print NUM lines of leading context -A, --after-context=NUM print NUM lines of trailing context -C, --context=NUM print NUM lines of output context -NUM same as --context=NUM --color[=WHEN], --colour[=WHEN] use markers to highlight the matching ssortingngs; WHEN is 'always', 'never', or 'auto' -U, --binary do not ssortingp CR characters at EOL (MSDOS/Windows) -u, --unix-byte-offsets report offsets as if CRs were not there (MSDOS/Windows) 'egrep' means 'grep -E'. 'fgrep' means 'grep -F'. Direct invocation as either 'egrep' or 'fgrep' is deprecated. When FILE is -, read standard input. With no FILE, read . if a command-line -r is given, - otherwise. If fewer than two FILEs are given, assume -h. Exit status is 0 if any line is selected, 1 otherwise; if any error occurs and -q is not given, the exit status is 2. Report bugs to: [email protected] GNU Grep home page: <http://www.gnu.org/software/grep/> General help using GNU software: <http://www.gnu.org/gethelp/> 

Définir une seule option:

 $ export GREP_OPTIONS='--color=auto' $ ls -al ~/ | grep zsh drwxr-xr-x 11 petr petr 4096 Sep 10 09:23 .oh-my-zsh drwxr-xr-x 4 petr petr 4096 Sep 24 14:25 .zsh lrwxrwxrwx 1 petr petr 19 Sep 22 12:24 .zshenv -> /home/petr/.zsh/env -rw-r--r-- 1 petr petr 5141 Sep 23 10:31 .zshrc -rw-r--r-- 1 petr petr 17 Sep 24 12:19 .zsh-update 

MISE À JOUR 2

Version ZSH: zsh 5.0.2 (x86_64-pc-linux-gnu)

Grep version: grep (GNU grep) 2.16

Si vous ajoutez des options dans la command line, alors travaillez normalement:

 $ unset GREP_OPTIONS $ ls -al ~/ | grep --color=auto --exclude-dir=.git zsh drwxr-xr-x 11 petr petr 4096 Sep 10 09:23 .oh-my-zsh drwxr-xr-x 4 petr petr 4096 Sep 24 15:45 .zsh lrwxrwxrwx 1 petr petr 19 Sep 22 12:24 .zshenv -> /home/petr/.zsh/env lrwxrwxrwx 1 petr petr 18 Sep 24 15:17 .zshrc -> /home/petr/.zsh/rc -rw-r--r-- 1 petr petr 17 Sep 24 12:19 .zsh-update 

Vous avez fait grep un alias pour grep $GREP_OPTIONS . Ne faites pas cela: la command GNU grep elle-même parsing la variable d'environnement GREP_OPTIONS .

Si vous voulez placer des options dans une variable, faites de cette variable un tableau et ne l'exportez pas (vous ne pouvez pas exporter de arrays, les variables d'environnement ont uniquement des valeurs de string).

 LS_OPTIONS=(--color=auto -q) alias ls='ls $LS_OPTIONS' 

Si vous avez une list d'options avec une valeur de string (par exemple parce qu'elle a été transmise dans l'environnement), vous devez la split. L'inconvénient de cette approche par rapport à l'utilisation d'un tableau est que les espaces blancs seront alors des séparateurs d'options, vous ne pouvez pas avoir d'espace dans une option. Utilisez $=VAR pour split la valeur de VAR en des mots séparés sur des espaces (ou plus généralement sur des caractères dans IFS ), comme d'autres shells (zsh ne développera pas de caractères generics avec $=VAR , utiliser $~VAR pour développer des caractères generics et $=~VAR pour faire les deux).

PS GREP_OPTIONS est dangereux car il s'applique dans les scripts qui peuvent s'appuyer sur l'set exact d'options qu'ils transmettent à grep . --color=auto est sur la seule chose sûre que vous pouvez mettre là; il est même officiellement déconseillé depuis grep 2.21 . Il serait préférable de faire un alias à grep (et aussi egrep et fgrep si vous les utilisez):

 my_grep_options=(--color=auto --exclude-dir=.cvs --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn) alias grep='grep $my_grep_options' egrep='grep -E $my_grep_options' fgrep='grep -F $my_grep_options'