我很难定义正确的标题。我正在寻找一种仍能获得我运行的命令结果/响应的方法,同时我使用&
将其pid传递给另一个显示加载指示符的函数。这是我尝试过的:
sizeondisk=$(du -hs "$path" | cut -f1) &
spinner "" "Getting file size for $path..."
因此,在命令运行时,它会显示一个加载指示器,完成后,它应该返回返回值(在这种情况下为文件大小)并将其传递给变量。
这是旋转功能:
spinner() {
local pid=$!
exitCode=0
...spinning here...
wait $pid &>/dev/null
exitCode=$?
return $exitCode
}
答案 0 :(得分:2)
老实说,在这里要做的最简单的事情是使用一个临时文件。还有其他方法,但是它们都很难看。
tempfile=$(mktemp -t result.XXXXXX)
{ du -hs "$path" | cut -f1; } >"$tempfile" & pid=$!
while kill -0 "$pid" && sleep 1; do
echo "Spinning..." >&2
done
wait "$pid"; exitCode=$?
sizeondisk=$(<"$tempfile")
答案 1 :(得分:0)
虽然Charles解决方案是完美的,但这是我从中构建的:
#
# sizeondisk=$(fileSize $path)
#
fileSize() {
local path="$1"
tempfile=$(mktemp -qt filesize.XXXXX)
{ du -hs "$path" | cut -f1; } >"$tempfile" &
spinner "" "Getting file/dir size for $path..."
sizeondisk=$(<"$tempfile")
sizeondisk="${sizeondisk// /}"
echo "$sizeondisk"
rm -rf "$tempfile"
}
对微调框的外观感兴趣的任何人,这里是:https://github.com/muuvmuuv/scripts/blob/master/spinner.sh