Я думаю, это то, что вы ищете:
command_list="command1;command2"
#I tried it with command_list="ls;ls <sub-directory>"
while IFS=';' read -ra command_array; do
for i in "${command_array[@]}"; do
# process "$i"
if ( $i &>/dev/null )
then
echo "Success"
else
echo "Failed"
fi
done
done <<< $command_list
Если вы хотите узнать, почему используется цикл while, прочитайте: https://stackoverflow.com/a/918931/11571342
РЕДАКТИРОВАТЬ: Как уже упоминалось в комментариях, нет способа узнать exit_status
команды в bash заранее. Вам придется выполнить команду, чтобы проверить это. Но есть способ, который мог бы работать (но обычно он терпит неудачу, когда используется rm
или insatll
)
while IFS=';' read -ra command_array; do
for i in "${command_array[@]}"; do
# process "$i"
$i &>/dev/null
exit_status=$?
if (( exit_status == 0 ))
then
$i
echo "Success...."
else
echo "Failed"
fi
done
done <<< $command_list