summaryrefslogtreecommitdiffstats
path: root/src/env_parallel
blob: 3f968fc3331e0c32a5804b79ec7076b8c0f6b9c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/usr/bin/env bash

# Copyright (C) 2016-2022 Ole Tange, http://ole.tange.dk and Free
# Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>
# or write to the Free Software Foundation, Inc., 51 Franklin St,
# Fifth Floor, Boston, MA 02110-1301 USA
#
# SPDX-FileCopyrightText: 2021-2022 Ole Tange, http://ole.tange.dk and Free Software and Foundation, Inc.
# SPDX-License-Identifier: GPL-3.0-or-later

grepq() {
    # grep -q for systems without -q
    grep >/dev/null 2>/dev/null "$@"
}

installer() {
    source="$1"
    script="$2"
    into="$3"
    if grepq $script "$into"; then
	true already installed
    else
	echo $source \`which $script\` >> "$into"
    fi
}

while test $# -gt 0; do
  key="$1"

  case $key in
      -i|--install)
	  installer . env_parallel.bash  "$HOME"/.bashrc
	  installer . env_parallel.sh  "$HOME"/.shrc
	  installer . env_parallel.zsh   "$HOME"/.zshenv
	  installer source env_parallel.ksh "$HOME"/.kshrc
	  installer source env_parallel.mksh "$HOME"/.mkshrc
	  echo $SHELL | grepq /pdksh &&
	      installer . env_parallel.pdksh "$HOME"/.profile
	  echo $SHELL | grepq /ash &&
	      installer . env_parallel.ash "$HOME"/.profile
	  echo $SHELL | grepq /dash &&
	      installer . env_parallel.dash "$HOME"/.profile
	  installer source env_parallel.csh "$HOME"/.cshrc
	  installer source env_parallel.tcsh "$HOME"/.tcshrc
	  mkdir -p "$HOME"/.config/fish
	  grepq env_parallel.fish "$HOME"/.config/fish/config.fish ||
  	    echo '. (which env_parallel.fish)' >> "$HOME"/.config/fish/config.fish
  	  echo 'Installed env_parallel in:'
  	  echo "    " "$HOME"/.bashrc
  	  echo "    " "$HOME"/.shrc
  	  echo "    " "$HOME"/.zshenv
  	  echo "    " "$HOME"/.config/fish/config.fish
  	  echo "    " "$HOME"/.kshrc
  	  echo "    " "$HOME"/.mkshrc
  	  echo "    " "$HOME"/.profile
  	  echo "    " "$HOME"/.cshrc
  	  echo "    " "$HOME"/.tcshrc
  	  exit
      ;;
      *)
  	echo "Unknown option: $key"
      ;;
  esac
  shift # past argument or value
done


cat <<'_EOS'
env_parallel only works if it is a function.

Do this and restart your shell:

bash:  Put this in $HOME/.bashrc:  . `which env_parallel.bash`
       E.g. by doing:  echo '. `which env_parallel.bash`' >> $HOME/.bashrc
       Supports: variables, aliases, functions, arrays

fish:  Put this in $HOME/.config/fish/config.fish:  . (which env_parallel.fish)
       E.g. by doing:
         echo '. (which env_parallel.fish)' >> $HOME/.config/fish/config.fish
       Supports: variables, aliases, functions, arrays

ksh:   Put this in $HOME/.kshrc:  source `which env_parallel.ksh`
       E.g. by doing:  echo 'source `which env_parallel.ksh`' >> $HOME/.kshrc
       Supports: variables, aliases, functions, arrays

mksh:  Put this in $HOME/.mkshrc:  source `which env_parallel.mksh`
       E.g. by doing:  echo 'source `which env_parallel.mksh`' >> $HOME/.mkshrc
       Supports: variables, aliases, functions, arrays

pdksh: Put this in $HOME/.profile:  source `which env_parallel.pdksh`
       E.g. by doing:  echo '. `which env_parallel.pdksh`' >> $HOME/.profile
       Supports: variables, aliases, functions, arrays

zsh:   Put this in $HOME/.zshrc:  . `which env_parallel.zsh`
       E.g. by doing:  echo '. `which env_parallel.zsh`' >> $HOME/.zshenv
       Supports: variables, functions, arrays

ash:   Put this in $HOME/.profile:  . `which env_parallel.ash`
       E.g. by doing:  echo '. `which env_parallel.ash`' >> $HOME/.profile
       Supports: variables, aliases

dash:  Put this in $HOME/.profile:  . `which env_parallel.dash`
       E.g. by doing:  echo '. `which env_parallel.dash`' >> $HOME/.profile
       Supports: variables, aliases

csh:   Put this in $HOME/.cshrc:  source `which env_parallel.csh`
       E.g. by doing:  echo 'source `which env_parallel.csh`' >> $HOME/.cshrc
       Supports: variables, aliases, arrays with no special chars

tcsh:  Put this in $HOME/.tcshrc:  source `which env_parallel.tcsh`
       E.g. by doing:  echo 'source `which env_parallel.tcsh`' >> $HOME/.tcshrc
       Supports: variables, aliases, arrays with no special chars

To install in all shells run:

  env_parallel --install

In a script you need to run this before using env_parallel:

bash:  . `which env_parallel.bash`
ksh:   source `which env_parallel.ksh`
mksh:  source `which env_parallel.mksh`
pdksh: source `which env_parallel.pdksh`
zsh:   . `which env_parallel.zsh`
ash:   . `which env_parallel.ash`
dash:  . `which env_parallel.dash`

For details: see  man env_parallel

_EOS