Пожалуйста, выведите конвейер, который вы получили в приведенной ниже команде
я удалил журнал строки предупреждения :предупреждение :и добавил заголовок, который вы упомянули. Все сделано с помощью awk с правильным форматированием пространства
команда
awk 'BEGIN{print "Date Time Type bundle Logininformation"}NR >1{gsub("Informing\t the JSS about","Local",$0);print $0}' k.txt|sed '/^$/d'| awk '{printf "%30s%30s%30s%30s%30s\n",$1,$2,$3,$4,$5}'| awk '$0 !~/^$/{print $0}'
выход
awk 'BEGIN{print "Date Time Type bundle Logininformation"}NR >1{gsub("Informing\t the JSS about","Local",$0);print $0}' k.txt|sed '/^$/d'| awk '{printf "%30s%30s%30s%30s%30s\n",$1,$2,$3,$4,$5}'| awk '$0 !~/^$/{print $0}'
Date Time Type bundle Logininformation
2019-04-25 09:49:26.843101+0530 Default jamf:[com.jamf.management.binary:all]
2019-04-25 20:14:47.928848+0530 Default jamf:[com.jamf.management.binary:all]
Если b
содержит буквальную строку printf "%s\n" "$a"
, т. е. вы не расширили $a
до нее, тогда да, eval "$b"
должно быть хорошо. Не знаю, зачем вам там eval
, ведь у вас просто статическая команда. Просто запустите printf "%s\n" "$a"
напрямую.
В комментариях вы сказали, что хотите сохранить некоторые команды для использования в будущем. Это работа функций. Например. эту команду printf
можно превратить в функцию, подобную этой:
println() {
printf "%s\n" "$1"
}
, который вы запускаете как println "hello there"
, println "$a"
или что-то еще. "$1"
— это первый аргумент функции, но, конечно, вместо этого вы можете прочитать стандартный ввод или использовать несколько аргументов ("$2"
, "$3"
,...; или все они в виде списка"$@"
(похожи"${array[@]}"
)).
Аналогично для более длинного набора операций:
#!/bin/bash
say_hi() {
echo "hello, $1"
}
louder() {
echo "$1!"
}
funcs=(say_hi louder)
names=(Huey Dewey Louie)
for name in "${names[@]}"; do
tmp=$name
for func in "${funcs[@]}"; do
tmp=$($func "$tmp")
done
echo "result: $tmp"
done