@@ -163,14 +163,22 @@ else
163163 CONTEXT=' '
164164fi
165165
166- # Other parameters are arguments passed to docker compose
167- ARGS=" $@ "
168-
169166# Check for docker preset
170167if [ " $( echo " $CONTEXT " | cut -c1) " = ' @' ]; then
171168
169+ # Other arguments to pass to docker
170+ # Use single quotes to safely pass arguments to shell
171+ # Escape single quotes in arguments
172+ ARGS=' '
173+ while [ $# -gt 0 ]; do
174+ NEW_ARG=$( echo " $1 " | sed " s/'/'\" '\" '/g" )
175+ ARGS=" $ARGS '$NEW_ARG '"
176+ shift
177+ done
178+
172179 PRINT_DOCKER_PRESETS_HELP=false
173180 DOCKER_ARGS=' '
181+ RUN_SHELL=false
174182
175183 # Remove first char
176184 CONTEXT=" ${CONTEXT# ?} "
@@ -200,6 +208,38 @@ if [ "$(echo "$CONTEXT" | cut -c1)" = '@' ]; then
200208 DOCKER_ARGS=' system prune -f -a --volumes'
201209 ;;
202210
211+ ' sa' )
212+ # Stop all containers
213+ DOCKER_ARGS=' stop $(docker ps -q)'
214+ RUN_SHELL=true
215+ ;;
216+
217+ ' rmf' )
218+ # Remove running containers, force
219+ DOCKER_ARGS=' rm -f $(docker ps -a -q)'
220+ RUN_SHELL=true
221+ ;;
222+ ' rms' )
223+ # Remove stopped containers
224+ DOCKER_ARGS=' rm $(docker ps -a -q -f status=exited -f status=dead)'
225+ RUN_SHELL=true
226+ ;;
227+ ' rmsf' |' rmfs' )
228+ # Remove stopped containers, force
229+ DOCKER_ARGS=' rm -f $(docker ps -a -q -f status=exited -f status=dead)'
230+ RUN_SHELL=true
231+ ;;
232+ ' rma' )
233+ # Remove all containers
234+ DOCKER_ARGS=' rm $(docker ps -a -q)'
235+ RUN_SHELL=true
236+ ;;
237+ ' rmaf' |' rmfa' )
238+ # Remove all containers, force
239+ DOCKER_ARGS=' rm -f $(docker ps -q)'
240+ RUN_SHELL=true
241+ ;;
242+
203243 * )
204244 echo " Error: Unknown docker preset '@$CONTEXT '"
205245 exit 1
@@ -218,29 +258,57 @@ if [ "$(echo "$CONTEXT" | cut -c1)" = '@' ]; then
218258 echo ' @rf Remove unused containers, networks and images'
219259 echo ' @rfa Remove all unused containers, networks and images'
220260 echo ' @rfav Remove all unused containers, networks, images and volumes'
261+ echo ' @sa Stop all running containers'
262+ echo ' @rmf Remove running containers, force'
263+ echo ' @rms Remove stopped containers'
264+ echo ' @rmsf Remove stopped containers, force'
265+ echo ' (aliases: @rmfs)'
266+ echo ' @rma Remove all containers'
267+ echo ' @rmaf Remove all containers, force'
268+ echo ' (aliases: @rmfa)'
221269 echo ' options:'
222270 echo ' -f Force, for example ignores abstract contexts'
223271 echo ' -n Dry run, print docker command without running it'
224272 echo ' -q Quiet, do not print docker command'
225273 exit 0
226274 fi
227275
228- if [ " $QUIET " = false ]; then
229- # Print docker command
230- echo ' '
231- echo " > docker $DOCKER_ARGS $ARGS "
232- echo ' '
233- fi
276+ if [ " $RUN_SHELL " = false ]; then
277+
278+ if [ " $QUIET " = false ]; then
279+ # Print docker command
280+ echo ' '
281+ echo " > docker ${DOCKER_ARGS}${ARGS} "
282+ echo ' '
283+ fi
284+
285+ if [ " $DRY_RUN " = false ]; then
286+ # Run docker command
287+ exec docker ${DOCKER_ARGS}${ARGS}
288+ fi
289+
290+ else # "$RUN_SHELL" = true
291+
292+ if [ " $QUIET " = false ]; then
293+ # Print docker command
294+ echo ' '
295+ echo " > sh -c 'docker ${DOCKER_ARGS}${ARGS} '"
296+ echo ' '
297+ fi
298+
299+ if [ " $DRY_RUN " = false ]; then
300+ # Run docker command
301+ exec sh -c " docker ${DOCKER_ARGS}${ARGS} "
302+ fi
234303
235- if [ " $DRY_RUN " = false ]; then
236- # Run docker
237- exec docker $DOCKER_ARGS $ARGS
238304 fi
239305
240306 exit 0
241307
242308fi
243309
310+ # Other parameters are arguments passed to docker compose
311+ ARGS=" $@ "
244312
245313COMPOSE_FILE_ARGS=' '
246314NO_COMPOSE_FILE_ARGS=false
0 commit comments