如何有效地在程序中调用另一个 bash 函数
How effectlively to call a bash function to another in a program
我有下面的 Bash 脚本,我在其中尝试创建用于为脚本中的输出文本创建颜色的函数,我试图将这些函数调用到另一个函数中,但不知何故它不起作用。
我环顾四周并用谷歌搜索,但没有得到任何具体的情况,有人可以帮助我们了解我做错了什么吗?
脚本:
#!/bin/bash
read -rsp $'Please Enter password below: ' SSHPASS
echo -n ""
export SSHPASS
RED=$'3[0;31m'; GREEN=$'3[32m'; YELLOW=$'3[1;33m'; BLUE=$'3[0;34m'; ENDCOLOR=$'3[0m'
#
function warning() {
printf "${RED}[WARNING] %s${ENDCOLOR}\n" "" >&2
}
function information() {
printf "${YELLOW}[INFO] %s${ENDCOLOR}\n" ""
}
function ok() {
printf "${GREEN}[INFO] %s${ENDCOLOR}\n" ""
}
function hostclr() {
printf "${BLUE}[INFO] %s${ENDCOLOR}\n" ""
}
function remote_connect() {
target_host=
sshpass -e ssh -q "${target_host}" "true" -o StrictHostKeyChecking=no -o ConnectTimeout=60 2>>/dev/null
if [[ $? -eq 0 ]]
then
SMBconf=$(sshpass -e ssh -q -t "$target_host" "grep -i vfs /etc/samba/smb.conf")
if [[ $SMBconf == "" ]];then
printf "%-20s %15s %5s %30s\n" hostclr "$target_host" ok "NO VFS Stack found(not Vulnerable!)"
elif [[ $SMBconf != "" ]];then
printf "%-20s %15s %5s %30s\n" hostclr "$target_host" warning "Its Vulnerable!"
else
printf "%-20s %15s %5s %30s\n" hostclr "$target_host" "Unable to get the ssh connection"
fi
fi
} 2>/dev/null
export -f remote_connect
< samba_new_Servers xargs -P10 -n1 -d'\n' bash -c 'remote_connect "$@"' --
unset SSHPASS
结果:
编辑:
我正在使用函数 hostclr
、ok
等
您仍然必须使用命令替换来获取 ok
等人的输出。用作 printf
.
的参数
printf "%-20s %15s %5s %30s\n" "$(hostclr "$target_host")" "$(ok "NO VFS Stack found(not Vulnerable!)")"
export -f remote_connect
您只导出了一个函数。您必须导出您使用的所有内容。
export RED GREEN YELLOW etc...
export -f remote_connect hostclr ok information etc...
我有下面的 Bash 脚本,我在其中尝试创建用于为脚本中的输出文本创建颜色的函数,我试图将这些函数调用到另一个函数中,但不知何故它不起作用。
我环顾四周并用谷歌搜索,但没有得到任何具体的情况,有人可以帮助我们了解我做错了什么吗?
脚本:
#!/bin/bash
read -rsp $'Please Enter password below: ' SSHPASS
echo -n ""
export SSHPASS
RED=$'3[0;31m'; GREEN=$'3[32m'; YELLOW=$'3[1;33m'; BLUE=$'3[0;34m'; ENDCOLOR=$'3[0m'
#
function warning() {
printf "${RED}[WARNING] %s${ENDCOLOR}\n" "" >&2
}
function information() {
printf "${YELLOW}[INFO] %s${ENDCOLOR}\n" ""
}
function ok() {
printf "${GREEN}[INFO] %s${ENDCOLOR}\n" ""
}
function hostclr() {
printf "${BLUE}[INFO] %s${ENDCOLOR}\n" ""
}
function remote_connect() {
target_host=
sshpass -e ssh -q "${target_host}" "true" -o StrictHostKeyChecking=no -o ConnectTimeout=60 2>>/dev/null
if [[ $? -eq 0 ]]
then
SMBconf=$(sshpass -e ssh -q -t "$target_host" "grep -i vfs /etc/samba/smb.conf")
if [[ $SMBconf == "" ]];then
printf "%-20s %15s %5s %30s\n" hostclr "$target_host" ok "NO VFS Stack found(not Vulnerable!)"
elif [[ $SMBconf != "" ]];then
printf "%-20s %15s %5s %30s\n" hostclr "$target_host" warning "Its Vulnerable!"
else
printf "%-20s %15s %5s %30s\n" hostclr "$target_host" "Unable to get the ssh connection"
fi
fi
} 2>/dev/null
export -f remote_connect
< samba_new_Servers xargs -P10 -n1 -d'\n' bash -c 'remote_connect "$@"' --
unset SSHPASS
结果:
编辑:
我正在使用函数 hostclr
、ok
等
您仍然必须使用命令替换来获取 ok
等人的输出。用作 printf
.
printf "%-20s %15s %5s %30s\n" "$(hostclr "$target_host")" "$(ok "NO VFS Stack found(not Vulnerable!)")"
export -f remote_connect
您只导出了一个函数。您必须导出您使用的所有内容。
export RED GREEN YELLOW etc...
export -f remote_connect hostclr ok information etc...