bash - 将 echo 命令的结果保存在 shell 脚本中?
问题描述
我正在尝试将 echo 命令的结果存储为要在 shell 脚本中使用的变量。Debian 4.19.0-6-amd64
该命令在终端中工作:echo $HOSTNAME
返回debian-base
正确的主机名。
我尝试在 shell 脚本中运行它,例如:
#!/usr/bin/bash
CURRENT_HOSTNAME=`echo $HOSTNAME`
echo $CURRENT_HOSTNAME
我尝试过扩展:
CURRENT_HOSTNAME=$(echo $HOSTNAME)
为了覆盖更多基础,我尝试了以下方法:
CURRENT_HOSTNAME=$HOSTNAME
# or
CURRENT_HOSTNAME="$HOSTNAME"
# also, in case a problem with reserved names:
test=$HOSTNAME
test="$HOSTNAME"
在终端中工作得很好!输出如下:
root@debian-base:/scripts# echo $HOSTNAME
debian-base
root@debian-base:/scripts# TEST_HOSTNAME=$HOSTNAME
root@debian-base:/scripts# echo $TEST_HOSTNAME
debian-base
root@debian-base:/scripts# TEST_TWO_HOSTNAME=$(echo $HOSTNAME)
root@debian-base:/scripts# echo $TEST_TWO_HOSTNAME
debian-base
一旦我运行脚本(如上):
root@debian-base:/scripts# sh test.sh
root@debian-base:/scripts#
我究竟做错了什么?
解决方案
您正在使用bash
您的终端。Bash 有变量$HOSTNAME
集。您使用sh
. sh
没有$HOSTNAME
.
选项:
bash test.sh
或将其作为程序运行:
chmod +x test.sh
./test.sh
但我认为您需要将第一行更改为:
#!/bin/bash
因为我认为/usr/bin
在大多数情况下都没有安装 bash。但是你需要尝试。要找出 bash 的安装位置,请使用which bash
另一种选择是使用hostname
二进制文件:
CURRENT_HOSTNAME=$(hostname)
echo $CURRENT_HOSTNAME
它适用于 bash 和 sh。
您可以从sh
运行开始sh
。你会看到它有一个类似 bash 的终端。你可以尝试做echo $HOSTNAME
。它不会显示,因为它不存在。您可以使用set
查看所有存在的变量(因为sh
没有制表符完成,所以很难弄清楚)。
推荐阅读
- spring-mvc - 从支付网关成功重定向后,用户在 Spring Boot 中注销
- java - 游标计数为零尽管数据存在于带有 Android 的 SQLite 中
- excel - 有没有办法在空格前组合 2 个字符?
- java - Java不同情况划分
- python - 如何创建 Y 轴不明确的堆叠条形图/猫形图?
- android - android过渡延迟
- node.js - IDE 在 PATH 中找不到节点二进制文件,但在“echo $PATH”期间显示(Ubuntu Linux)
- angular - 将 Angular 4 升级到 10:错误无法安全更新,因为包具有冲突的依赖项
- android - 在工具栏中将图标颜色更改为深黑色
- python - on_message(message) 重构此函数以将其认知复杂度从 25 降低到允许的 15。| Python Discord.py