在 bash 脚本中执行 Linux 命令并将输出写入控制台并保留断行

Execute Linux command in bash script and write output to console with preservation of break lines

我想要一个 bash 函数来执行给定的命令,将其输出打印到控制台并在脚本执行完成时通知我。该函数看起来像这样:

n() {
  echo $($a)
  notify-send "Exexution of '$@' has finished."
}

当我 运行 n ls 我希望 ls 的输出与从控制台执行的输出相同。但是它将 ls 的输出放在一行上。

$ n ls -la 
drwxr-xr-x 30 orangetux orangetux 4096 Jan 18 12:41 bundle drwxr-xr-x 2 orangetux orangetux 4096 Jan 9 22:23 colors

而不是:

$ ls
drwxr-xr-x 30 orangetux orangetux 4096 Jan 18 12:41 bundle
drwxr-xr-x  2 orangetux orangetux 4096 Jan  9 22:23 colors

如何像 ls 一样打印 n ls 的输出?

编辑

删除了关于突出显示的注释。

您可以只使用:

n() { "$@"; echo "Execution of '$@' has finished."; }

即不要使用 echo $(...),因为 shell 不带引号会去除空格。

你也可以这样做:

echo "$($@)"