如何在 Shell 函数中使用带有引号和分号的命令
How to use commands inside Shell function while having quotes and semicolon
我从 google 那里借用了下面的代码并做了一些修改,但不知何故它没有给出预期的输出。
Shell 函数:
remote_collect() {
target_host=
{
read -r rhelInfo
read -r perlInfo
} < <(
ssh -i my_connect "root@${target_host}" \
-o StrictHostKeyChecking=no -o PasswordAuthentication=no \
/bin/bash <<-EOF
cat /etc/redhat-release | awk 'END{print $7}'
#rpm -qa --last | awk '/kernel-[0-9]/'|head -1
rpm -qa --last | awk '/kernel-[0-9]/{ first=; =""; print [=11=] }'
EOF
) 2>/dev/null
问题出在哪里:
在上面的函数中,命令 rpm -qa --last | awk '/kernel-[0-9]/{ first=; =""; print [=12=] }'
不会产生任何东西,而 运行 作为脚本,但是如果我使用 rpm -qa --last | awk '/kernel-[0-9]/'|head -1
那么它就可以完美地工作,所以,我遗漏了一些东西想逃避什么?
请帮助我理解或解决这个问题。
您应该转义所有 $
序列才能工作,它应该会工作。
请尝试以下。
rpm -qa --last | awk '/kernel-[0-9]/{ first=$1; $1=""; print $0 }'
我从 google 那里借用了下面的代码并做了一些修改,但不知何故它没有给出预期的输出。
Shell 函数:
remote_collect() {
target_host=
{
read -r rhelInfo
read -r perlInfo
} < <(
ssh -i my_connect "root@${target_host}" \
-o StrictHostKeyChecking=no -o PasswordAuthentication=no \
/bin/bash <<-EOF
cat /etc/redhat-release | awk 'END{print $7}'
#rpm -qa --last | awk '/kernel-[0-9]/'|head -1
rpm -qa --last | awk '/kernel-[0-9]/{ first=; =""; print [=11=] }'
EOF
) 2>/dev/null
问题出在哪里:
在上面的函数中,命令 rpm -qa --last | awk '/kernel-[0-9]/{ first=; =""; print [=12=] }'
不会产生任何东西,而 运行 作为脚本,但是如果我使用 rpm -qa --last | awk '/kernel-[0-9]/'|head -1
那么它就可以完美地工作,所以,我遗漏了一些东西想逃避什么?
请帮助我理解或解决这个问题。
您应该转义所有 $
序列才能工作,它应该会工作。
请尝试以下。
rpm -qa --last | awk '/kernel-[0-9]/{ first=$1; $1=""; print $0 }'