我想并排格式化两个函数的输出。
以下是我目前正在处理的示例,包括我在底部尝试失败。
#!/bin/bash
status_awsomeproject1() {
echo "\e[0;33m\n################ Status awsomeproject1 ################\e[0;37m"
cd /home/joaoc/Projects/awsomeproject1
git status
cd vendor/libs
echo "\e[0;33m\n################ Status awsomeproject1-> lib-1 ################\e[0;37m"
git -C lib-1 status
echo "\e[0;33m\n################ Status awsomeproject1-> lib-2 ################\e[0;37m"
git -C lib-2 status
echo "\e[0;33m\n################ Status awsomeproject1-> lib-3 ################\e[0;37m"
git -C lib-3 status
}
status_awsomeproject2() {
echo "\e[0;33m\n################ Status awsomeproject2 ################\e[0;37m"
cd /home/joaoc/Projects/awsomeproject2
git status
cd vendor/libs
echo "\e[0;33m\n################ Status awsomeproject2-> lib-1 ################\e[0;37m"
git -C lib-1 status
echo "\e[0;33m\n################ Status awsomeproject2-> lib-2 ################\e[0;37m"
git -C lib-2 status
echo "\e[0;33m\n################ Status awsomeproject2-> lib-3 ################\e[0;37m"
git -C lib-3 status
}
echo "$(status_awsomeproject1) || $(status_psp)" | column -t
wrap()命令执行我需要的操作但仅作为单个列执行。
如何实现所需的输出?
谢谢
编辑,以提供最小的工作示例:
#!/bin/bash
string_output1() {
echo "################ Example long multi-line string ################\n\n"
echo "################ Example long multi-line string ################\n\n"
echo "################ Example long multi-line string ################\n\n"
echo "################ Example long multi-line string ################\n\n"
echo "################ Example long multi-line string ################\n\n"
}
string_output2() {
echo "################ Example long multi-line string ################\n\n"
echo "################ Example long multi-line string ################\n\n"
echo "################ Example long multi-line string ################\n\n"
echo "################ Example long multi-line string ################\n\n"
echo "################ Example long multi-line string ################\n\n"
echo "################ Example long multi-line string ################\n\n"
}
echo "$(string_output1) || $(string_output2)" | column -t
答案 0 :(得分:1)
如果您可以使用临时文件,请执行以下操作:
status_awsomeproject1>tmp1
status_awsomeproject2>tmp2
paste tmp1 tmp2
rm tmp1 tmp2 # Remove the temporary files after use
如果您的shell支持[ process substitution ],则可以将上述内容简化为:
paste -d^ <(status_awsomeproject1) <(status_awsomeproject2)
修改强>
您可以将结果传递给awk以进行对齐,如下所示:
paste -d^ <(status_awsomeproject1) <(status_awsomeproject2) | \
awk 'BEGIN{FS="\^"}{printf "%-10s %s\n",$1,$2}' 2>/dev/null
首先,你必须找到一个合适的分隔符,它很少/没有机会出现在函数的输出中。我选择了^
。然后,使用此分隔符作为awk字段分隔符,并使用awk printf
宽度来控制宽度。
注意:强>
我已将awk printf
宽度设置为10,但您需要根据函数的预期输出长度进行更改。试验和错误,但是nbd。