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/