BASH将变量传递给函数
发布时间:2020-12-15 21:09:20 所属栏目:安全 来源:网络整理
导读:这是我第一次尝试BASH,我遇到了一个小问题. 此脚本的目的是擦除ZFS池并创建日志文件. 代码按预期工作,除了下面的第19行. (LogEntry $LOG_LINE). 为了调试目的,我添加了第18行,它正在运行. 第18行将“pool’tankm’健康”写入日志,而第19行只写“pool”.从功
这是我第一次尝试BASH,我遇到了一个小问题.
此脚本的目的是擦除ZFS池并创建日志文件. 代码按预期工作,除了下面的第19行. (LogEntry $LOG_LINE). 第18行将“pool’tankm’健康”写入日志,而第19行只写“pool”.从功能上讲,这些线路做的是同样的事情(至少在我眼里),所以为什么一个工作而不是另一个工作. 我假设根casue是zpool status命令输出中池名称之前的引用,我正在为此替换char,但我会理解这两行是如何以不同方式进行间接的. 提前致谢 #!/bin/bash LOG_FILE=/home/declan/log/zfs_scrub LOG_LAST=/home/declan/log/zfs_scrub_last function LogEntry { echo -e "$(date "+%Y %m %d %T") ; $1" >>$LOG_FILE 2>&1 } cp $LOG_FILE $LOG_LAST rm $LOG_FILE LogEntry "Starting ZFS Scrub" for POOL in $(zpool list -H -o name) ; do LogEntry "Starting Scrub on $POOL" zpool scrub $POOL 2>/dev/null LOG_LINE=$(zpool status -x $POOL 2>&1) echo -e "$(date "+%Y %m %d %T") ; $LOG_LINE" >>$LOG_FILE 2>&1 LogEntry $LOG_LINE LogEntry "Ending Scrub on $POOL" done LogEntry "Ending ZFS Scrub" 解决方法
你必须在$LOG_LINE周围添加双引号:
LogEntry "$LOG_LINE" 否则,由空格分隔的每个元素都被解释为LogEntry函数的专用参数. 或者,您可以更改您的函数并使用$*或$@来引用所有参数: function LogEntry { echo -e "$(date "+%Y %m %d %T") ; $*" >>$LOG_FILE 2>&1 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |