Использование списка с разделителями строк в качестве параметра

Было несколько ситуаций, когда у меня был некоторый результат, такой как

thing1 thing2 thing3 

Но хотели сделать что-то вроде:

 *command* thing1 *command* thing2 *command* thing3 

Примером этого может быть: допустим, я хочу убить все сеансы экрана. Есть ли способ, которым я могу получить одну команду, чтобы использовать somthing как:

 screen -ls 

что может привести к

 88.mine (detached) 22.mine (detached) 

Могу ли я сделать что-то, что приведет к появлению всех возможных команд, таких как:

 screen -S 88.mine test -X screen -S 88.mine test -X 

одним махом?

Конечно, просто используйте:

 while read -r line; do command "$line" done < file 

В вашем более конкретном примере screen вам нужно удалить оставшийся текст:

 while read -r session _; do screen -S "$session" test -X done < file 

Существует несколько способов чтения списка, разделенного новой строкой, в качестве входных данных. Тот, который вы выберете, будет зависеть от того, что именно вы пытаетесь сделать, но вот несколько простых примеров:

  • while/read

     $ printf "Tom\nDick\nHarry\n" | while read name; do echo "Hi $name"; done Hi Tom Hi Dick Hi Harry 
  • for

     $ for name in $(printf "Tom\nDick\nHarry\n"); do echo "Hi $name"; done Hi Tom Hi Dick Hi Harry