Mig*_*que 33 scripting bash string
我的任务是创建一个自动化的服务器强化脚本,他们需要的一件事是每个命令执行的所有输出的报告。我想将错误消息存储在一个字符串中并将其附加到一个文本文件中。
假设我运行了这个命令:
/sbin/modprobe -n -v hfsplus
Run Code Online (Sandbox Code Playgroud)
在我的机器上运行它的输出是:
FATAL: Module hfsplus not found
Run Code Online (Sandbox Code Playgroud)
如何将该错误消息存储在字符串中?任何帮助将不胜感激。谢谢!
Nid*_*dal 37
您可以通过重定向错误命令来实现:
/sbin/modprobe -n -v hfsplus 2> fileName
Run Code Online (Sandbox Code Playgroud)
作为脚本
#!/bin/bash
errormessage=$( /sbin/modprobe -n -v hfsplus 2>&1)
echo $errormessage
Run Code Online (Sandbox Code Playgroud)
或者
#!/bin/bash
errormessage=`/sbin/modprobe -n -v hfsplus 2>&1 `
echo $errormessage
Run Code Online (Sandbox Code Playgroud)
如果你想追加错误使用>>
而不是>
确保使用2>&1
而不是2> &1
避免错误“意外标记‘&’附近的语法错误”
gra*_*ite 18
只需在 bash 脚本中存储为字符串:
X=`/sbin/modprobe -n -v hfsplus 2>&1`
echo $X
Run Code Online (Sandbox Code Playgroud)
这可能会好一点,因为您会在执行命令时看到消息:
TMP=$(mktemp)
/sbin/modprobe -n -v hfsplus 2>&1 | tee $TMP
OUTPUT=$(cat $TMP)
echo $OUTPUT
rm $TMP
Run Code Online (Sandbox Code Playgroud)
小智 9
要在变量中返回错误消息,很简单;
error=$(/sbin/modprobe -n -v hfsplus 2>&1 1>/dev/null)
echo $error
Run Code Online (Sandbox Code Playgroud)
小智 6
较新的 bash 版本(即 bash 4.1+):
$ msg=$(ls -la nofile 2>&1)
$ echo $msg
ls: cannot access nofile: No such file or directory
$
Run Code Online (Sandbox Code Playgroud)