Самое простое решение - процитировать команду, переданную в sem:
sem -j+0 "find \"$i\" -type f -print0"
Вы можете увидеть разницу в этом примере
$ sem -j 8 echo "a a"
a a
$ sem -j 8 'echo "a a"'
a a
Una variante sh
, y eliminaría los problemas asociados con ${var,,}
que usa la configuración regional para convertir cadenas (minúsculas I
no es i
para todos, por ejemplo):
#! /bin/sh -
while true; do
printf %s "Please enter your choice (stringA or stringB): "
IFS= read -r result || exit # exit on EOF
case $result in
([sS][tT][rR][iI][nN][gG][aAbB]) break
esac
echo >&2 Invalid choice.
done
El problema en su código es que su ciclo se repite mientras $result
no es lo mismo que tantostringA
comostringB
(al mismo tiempo ). Es posible que desee utilizar
while [[ "${result,,}" != 'stringa' ]] && [[ "${result,,}" != 'stringb') ]]
o
until [[ "${result,,}" == 'stringa' ]] || [[ "${result,,}" == 'stringb') ]]
Para que un usuario elija una de varias opciones, no haga que escriba largas cadenas. En su lugar, proporcióneles un menú simple para elegir.
Sugerencia:
#!/bin/bash
PS3='Your choice: '
select result in 'stringA' 'stringB'; do
case $REPLY in
[12])
break
;;
*)
echo 'Invalid choice' >&2
esac
done
printf 'You picked %s!\n' "$result"
Ejecutando esto:
$ bash script.sh
1) stringA
2) stringB
Your choice: 3
Invalid choice
Your choice: 2
You picked stringB!