我有一个 shell 脚本,它将文件读入数组。它与 RHEL 完美配合,但是当我在 Ubuntu 上运行相同的脚本时出现错误。这是脚本。
file=/root/monitor.txt
while IFS=',' read -ra line ; do
echo -e "export MASTER_IP=${line[2]}" >> ~/.bashrc
source ~/.bashrc
done < $file
Run Code Online (Sandbox Code Playgroud)
上面的脚本在 RHEL 中完美运行。我在 Ubuntu 上运行时遇到的错误是
read: Illegal option -a
Run Code Online (Sandbox Code Playgroud)
read -a是 bash 功能,但在 Ubuntu 上/bin/sh指向dash,它不支持该-a选项。有几种方法可以解决这个问题:
在 Ubuntu 上,只需在 bash 下运行脚本,将第一行更改为#!/bin/bash(如 Charles Duffy 所建议的)
相反的read -a,只要给的变量,如列表read f1 f2 f3 f4 f5,然后指领域$f1,$f2等等。在这种情况下,如果你有超过5场,你需要增加更多的变数,否则$f5将包含行的其余部分。
使用awk代替read。Awk 非常适合这种字段处理任务:您可以用类似的东西替换 while 循环awk -F, '{print "export MASTER_IP=" $3}' $file >> ~/.bashrc,然后~/.bashrc在最后使用source 。