gpt4 book ai didi

linux - 如何添加详细选项来控制脚本输出?

转载 作者:太空狗 更新时间:2023-10-29 11:35:09 25 4
gpt4 key购买 nike

我正在尝试在我的脚本中为用户添加一种“冗长”选项。
也就是说,当用户将 -v 作为参数添加到我的脚本时,脚本应该在 stdout 上吐出命令通常执行的所有操作。如果没有 -v ,那么除了我手动 echo 通知用户正在运行的命令外,什么都不应该打印在 stdout 上。

这是我的想法和实现-

  1. 在脚本中每个命令的末尾附加一个变量V-
    dd if=/dev/zero of=${XYZ} bs=1M count=5 ${V}
  2. 检查用户的 -v 选项,如果不存在则将 /dev/null 分配给 V 否则 V 无论如何都是空的。

脚本片段:

V=">/dev/null"
while getopts "v" opt; do
case $opt in
v) V="" ;;
esac
done

dd if=/dev/zero of=${XYZ} bs=1M count=5 ${V}

因此,我希望当 V 设置为 /dev/null 时,dd 命令不会打印任何其他内容 V 无论如何都是空的,所以命令将打印它通常打印的内容。

问题:
当我运行脚本时,命令 dd(或与此相关的任何其他命令)将 ${V} 视为参数并提示不理解它
正在创建磁盘镜像:dd:无法识别的操作数‘>/dev/null’

更让我困惑的是,当我在 dd 命令中硬编码 /dev/null
dd if=/dev/zero of=${XYZ} bs=1M count=5 >/dev/null ,它按预期运行(即没有输出打印)。

如果有人能对上述行为有所了解并提出相应建议,我们将不胜感激。

谢谢!

最佳答案

如果你想静音输出(stdout),运行:

exec >/dev/null

如果你想让某些命令静音而不是其他命令,请保存一份标准输出副本并根据需要重定向:

exec 6>&1         # Save current stdout as file handle 6
exec >/dev/null # Silence stdout
date # This command is silenced
exec >&6 # Restore stdout to its original destination
echo Hi # This command will display

示例脚本

#!/bin/bash

# Save current stdout as file handle 6 and then set for silence
exec 6>&1
exec >/dev/null

# Process options
while getopts "v" opt; do
case "$opt" in
v) exec >&6 ;;
esac
done

# Generate output
echo "Information out"

关于linux - 如何添加详细选项来控制脚本输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56417174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com