【问题标题】:bashrc and export variablesbashrc 和导出变量
【发布时间】:2020-06-19 16:16:08
【问题描述】:

我正在添加一个变量,每次运行终端窗口时都希望导出该变量。问题是它指向的文件或目录不是此时创建的。但无论如何我都希望 bash 加载和导出变量,因为当我使用它时,文件/文件夹就会在那里。

变量

export ports=$(awk -F "/" 'BEGIN {ORS=","} /\/tcp/ {print $1}' nmap/initial.nmap | sed 's/,$//')
export portsf=$(awk -F "/" 'BEGIN {ORS=","} /\/tcp/ {print $1}' nmap/full.nmap | sed 's/,$//')

错误信息:

awk: cmd. line:1: fatal: cannot open file `nmap/initial.nmap' for reading (No such file or directory)
awk: cmd. line:1: fatal: cannot open file `nmap/full.nmap' for reading (No such file or directory)

有什么方法可以通过 bashrc 完成这项工作,还是我要创建一个别名来导出我想要每个终端会话的变量?

感谢您的宝贵时间。

【问题讨论】:

  • 命令替换立即运行;在您真正想要ports 的值之前,它不会被推迟。您必须等到nmap/*.nmap 存在才能定义变量。
  • 哦,好的,谢谢!,在创建 nmap/*.nmap 后,我必须将导出设置为别名并以这种方式使用它们。编辑:别名 --> echo "export string so at least copy and paste" 谢谢!
  • 我会推荐函数而不是别名。
  • 如何在 bashrc 中做 name 函数?
  • 如何在 bashrc 中做 name 函数?会是这样吗?功能端口() { 出口端口.... } 出口 -f 端口

标签: bash variables export


【解决方案1】:

只需将以下函数添加到您的.bashrc

set_ports () {
    awk 'F "/" 'BEGIN {ORS=","} /\/tcp/ {print $1}' "$1" | sed 's/,$//'
}

一旦需要的文件可用,您就可以运行

ports=$(set_ports nmap/initial.nmap)
portsf=$(set_ports nmap/full.nmap)
export ports ports

如果您实际上不需要导出变量(我怀疑是这种情况),则可以省略最后一行。

【讨论】:

  • 这就是我所拥有的
【解决方案2】:

您还可以检查 .bashrc 中的文件是否存在,并仅在它们存在时执行导出命令。 像这样的东西应该可以工作:

[ -f nmap/initial.nmap ] && export ports=$(awk -F "/" 'BEGIN {ORS=","} /\/tcp/ {print $1}' nmap/initial.nmap | sed 's/,$//')
[ -f nmap/full.nmap ] && export portsf=$(awk -F "/" 'BEGIN {ORS=","} /\/tcp/ {print $1}' nmap/full.nmap | sed 's/,$//')

只有在 '&&' 之前的内容以退出代码 0 退出时,才会评估 '&&' 之后的内容。具体来说,例如第一行,如果文件 'nmap/initial.nmap' 存在,您确实会导出 'ports' 变量而不是其他变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 2014-09-25
    • 2015-06-16
    • 2021-04-25
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多