nohup test.sh 2>1& > /dev/null &
时间: 2023-10-31 19:55:33 浏览: 151
您好!您的第一个问题是关于使用 nohup 命令运行 test.sh 脚本的具体命令。根据您提供的命令,您想要将脚本的错误输出定向到标准输出,并将标准输出重定向到 /dev/null,并在后台运行脚本。
正确的命令应该是:
```shell
nohup test.sh > /dev/null 2>&1 &
```
这个命令中,`> /dev/null` 将标准输出重定向到 /dev/null,而 `2>&1` 将标准错误输出重定向到标准输出,从而将错误输出也重定向到 /dev/null。最后的 `&` 符号将脚本在后台运行。
这样,通过上述命令运行 test.sh 脚本时,既不会在终端输出任何结果,也不会将错误信息显示出来,并且脚本会在后台一直运行。
相关问题
#!/bin/bash CPWD=$(cd $(dirname $0);pwd) cd $CPWD rm -f ssd_symbol_set hdd_symbol_set nvme_symbol_set filter_ssd_hdd_nvme_set() { rm -f ssd_symbol_set hdd_symbol_set nvme_symbol_set os_disk_symbol=$(echo $(lsblk |grep -B1 -E "part|boot" |grep -E "^sd[a-z]+|^nvme" |awk '{print $1}') |sed 's/ /|/') non_os_disk_set=$(lsscsi -g |-E "ATA|TOSHIBA" |awk '{print $(NF-1)}' |grep -Ev $os_disk_symbol) if [[ -n $non_os_disk_set ]];then for i in $(echo "$non_os_disk_set") do rotationRate=$(smartctl -i $i |awk -F":" '/Rotation Rate/{print $2}') if [[ $rotationRate =~ "Solid State Device" ]];then echo $i |awk -F"/" '{print $3}' >> ssd_symbol_set elif [[ $rotationRate =~ "rpm" ]];then echo $i |awk -F"/" '{print $3}' >> hdd_symbol_set fi done fi nvme_info_set=$(nvme list |grep -E "nvme[0-9]+n1") if [[ -n $nvme_info_set ]];then echo "$nvme_info_set" |awk '{print $1}' |awk -F"/" '{print $3}' > nvme_symbol_set fi } hdd_parallel_fio_test() { # multi hdd fio test if [ -s hdd_symbol_set ];then for dev in $(cat hdd_symbol_set) do nohup &>/dev/null bash hdd_raw_fio_test.sh $dev & done wait mkdir -p $CPWD/hdd_fio_log mv hdd_sd*_*.log $CPWD/hdd_fio_log fi } ssd_parallel_fio_test() { # multi sata ssd fio test if [ -s ssd_symbol_set ];then for dev in $(cat ssd_symbol_set) do nohup &>/dev/null bash ssd_raw_fio_test.sh $dev & done wait mkdir -p $CPWD/ssd_fio_log mv ssd_sd*_*.log $CPWD/ssd_fio_log fi } nvme_parallel_fio_test() { # multi nvme ssd fio test if [ -s nvme_symbol_set ];then for dev in $(cat nvme_symbol_set) do nohup &>/dev/null bash ssd_raw_fio_test.sh $dev & done wait mkdir -p $CPWD/nvme_fio_log mv ssd_nvme*_*.log $CPWD/nvme_fio_log fi } filter_ssd_hdd_nvme_set #hdd_parallel_fio_test #ssd_parallel_fio_test nvme_parallel_fio_test
这是一个 Shell 脚本,主要作用是对系统中的 SSD、HDD 和 NVMe 进行 FIO 性能测试,并将测试结果保存在对应的日志文件中。具体实现步骤如下:
1. 定义了一个函数 filter_ssd_hdd_nvme_set,该函数的作用是获取系统中所有 SSD、HDD 和 NVMe 的设备符号,并保存在对应的文件中。
2. 定义了三个函数 hdd_parallel_fio_test、ssd_parallel_fio_test 和 nvme_parallel_fio_test,分别用于对系统中的 HDD、SSD 和 NVMe 执行 FIO 性能测试,并将测试结果保存在对应的日志文件中。
3. 在执行主函数时,首先调用 filter_ssd_hdd_nvme_set 函数获取 SSD、HDD 和 NVMe 的设备符号,然后分别调用 hdd_parallel_fio_test、ssd_parallel_fio_test 和 nvme_parallel_fio_test 函数对它们进行 FIO 性能测试。
4. 在执行 FIO 测试时,使用 nohup 命令将测试脚本在后台执行,并将输出重定向到 /dev/null,以避免输出影响测试结果。
5. FIO 测试完成后,将测试日志文件移动到对应的目录中,以便后续分析。
最终,执行该脚本后,可以对系统中的所有 SSD、HDD 和 NVMe 进行 FIO 性能测试,并将测试结果保存在对应的日志文件中,方便后续分析和比较。
nohup: appending output to 'nohup.out' nohup: appending output to 'nohup.out'
### nohup 命令行为解析
当使用 `nohup` 命令运行程序时,默认情况下,如果未指定其他输出位置,则会忽略输入并将标准输出和标准错误输出追加到当前目录下的 `nohup.out` 文件中[^1]。
#### 默认情况下的输出重定向
对于简单的命令执行:
```bash
nohup ./test.sh
```
这会导致所有来自脚本的标准输出和标准错误都被写入名为 `nohup.out` 的文件里。如果没有权限创建此文件或遇到其他IO问题,可能会收到相应的警告信息。
#### 自定义输出路径
可以改变默认的日志保存地点,通过显式的重定向操作符来实现这一点:
```bash
nohup ./test.sh > a.txt
```
这里只改变了标准输出的方向,而标准错误依旧会被发送给终端显示出来;因此可能还会看到有关无法读取输入之类的提示消息。要同时控制两者,需进一步调整命令结构。
#### 同步管理标准输出与标准错误
为了确保所有的输出都按照预期的方式处理,应该这样组合使用重定向符号:
```bash
nohup ./test.sh > a.txt 2>&1 &
```
上述指令不仅指定了新的目标文件用于存储正常输出(`> a.txt`),还利用了特殊的语法让错误信息跟随其后(`2>&1`),并且加上后台进程标志(&),使得整个过程可以在用户退出shell之后继续独立工作而不受影响。
#### 完全抑制日志生成
有时出于性能考虑或是为了避免不必要的大容量日志积累,可以选择完全丢弃这些数据流。这时可借助 `/dev/null` 这一特殊设备节点作为接收者——它就像一个吞噬一切的数据黑洞一样不会留下任何痕迹:
```bash
nohup java -jar yourapp.jar >/dev/null 2>&1 &
```
这条语句有效地阻止了任何形式的外部可见反馈产生,无论是成功的还是失败的结果都不会被记录下来[^3]。
阅读全文