linux - 使用 sed 替换 bash 文件中的变量 - 输出滞后

标签 linux bash shell sed

I'm trying to write a bash script that search and replace a specific user input saved in config.sh using sed. This does work; however it only works partially as shown below.

config.sh

#!/bin/bash
#
#UserName to be deleted
delUserName=""
#Source
delUserSrc=/Users/"$delUserName"
#Destination
delUserDest=/Users/John/BackUp/"$delUserName"/"$delUserName".zip

main.sh

#!/bin/bash
#
source scripts/config.sh

echo -e "\nEnter user you wish to delete: \c" 
read -r UserName
sed -i '' -e "s/delUserName=.*/delUserName=$UserName/g" scripts/config.sh
echo -e "delUserName: $delUserName"
echo -e "delUserSrc: $delUserSrc"
echo -e "delUserDest: $delUserDest"

output1:

Enter user you wish to delete: Test
delUserName: 
delUserSrc:/Users/
delUserDest:/Users/John/BackUp/ / .zip

output2:

Enter user you wish to delete: Test1
delUserName:Test
delUserSrc:/Users/Test
delUserDest:/Users/John/BackUp/Test/Test.zip

output3:

Enter user you wish to delete: Test1
delUserName:Test1
delUserSrc:/Users/Test1
delUserDest:/Users/John/BackUp/Test1/Test1.zip

expected output1:

Enter user you wish to delete: Test
delUserName:Test
delUserSrc:/Users/Test
delUserDest:/Users/John/BackUp/Test/Test.zip

expected output2:

Enter user you wish to delete: Test1
delUserName:Test1
delUserSrc:/Users/Test1
delUserDest:/Users/John/BackUp/Test1/Test1.zip

脚本滞后。 sed 立即更改了 $delUserName 的值,但是 $delUserName、$delUserSrc 和 $delUserDest 的正确值仅在第二次运行时出现。当所有变量都在 main.sh 中时,脚本运行良好,除非我必须这样做。将用户输入保存到 $UserName 中。知道为什么第一次运行时不显示这些值吗? 谢谢

最佳答案

这是我认为正在发生的事情。

sed 命令替换文件中的文本。它不会修改内存中变量的值。这些值是在您 source config.sh 时分配的。

所以在你的 sed 行之后,你需要加入这一行:

source scripts/config.sh

它与您的脚本中的上述行相同。这也是必需的,以便您新替换的值将加载到变量中,以便您可以显示它们。一旦新值加载到内存中,echo 语句将能够将变量扩展为该新值。

关于linux - 使用 sed 替换 bash 文件中的变量 - 输出滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41906219/

相关文章:

linux - 显示未排序的 file1 中不存在于 file2 中的行

C程序在打开端口失败前设置端口参数

bash - 如何检查 curl 是否成功并打印消息?

windows - 在打开 Emacs 时自定义窗口

shell - 在 shell 中使用管道执行变量

linux - 为 Redhat 中已经运行的进程启用核心转储

linux - shell命令以点开头是什么意思?

bash - 在 bash 中将 **heredoc** 添加到文件中

bash - 在没有 nc 的情况下获取 memcached 统计信息很热吗?

php - 将 exec 输出保存到文件中