我想自动化一些代码,并且我希望当我在 KITTY 上执行 bash 脚本时,再分成 2 个窗格。
我用下一个代码做到了这一点:
cd ~/projects/Project1 && ng s -o &
kitty @ launch sh -c "cd ~/projects/Project2 && npm run dev"
kitty @ launch sh -c "cd ~/projects/Project && npm run dev"
然后我想更复杂一点并更改文件的连接字符串。 我的连接字符串如下所示:
Server=.\\SQLEXPRESS;Database=Testing;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;
我想用这样的东西替换它:
Data Source=localhost;Database=Testing123;User Id=sa;Password=MyPassword/*-432;MultipleActiveResultSets=true;Encrypt=false;
我用
sed
编写了这段代码并且有效。如果我直接放入终端(它正在替换线路)
sed -i 's/Server=\.\\\\SQLEXPRESS;Database=Testing;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;/Data Source=localhost;Database=Testing123;User Id=sa;Password=MyPassword\/*-432;MultipleActiveResultSets=true;Encrypt=false;/g' ~/projects/Project1/appsettings.json
我的问题是,当我尝试与 Kitty 一起使用时,我发送了所有命令,但无法使其正常工作。像这样的东西:
kitty @ launch sh -c "sed -i 's/Server=\.\\\\SQLEXPRESS;Database=Testing;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;/Data Source=localhost;Database=Testing123;User Id=sa;Password=MyPassword\/*-432;MultipleActiveResultSets=true;Encrypt=false;/g' ~/projects/Project1/appsettings.json && cd ~/projects/primereact && npm run dev"
有什么帮助吗? 最终目标是执行脚本并在分成 3 个的同一终端中打开,但在其中一个终端中替换连接字符串。
我希望能说清楚,谢谢您的时间!
听起来这就是您想要做的:
输入示例:
$ cat file
Server=.\\SQLEXPRESS; must change
Server=x\\SQLEXPRESS; must not change
预期输出:
$ sed 's/\.\\\\SQLEXPRESS/CHANGED/' file
Server=CHANGED; must change
Server=x\\SQLEXPRESS; must not change
失败:
$ sh -c "sed 's/\.\\\\SQLEXPRESS/CHANGED/' file"
Server=.\\SQLEXPRESS; must change
Server=x\\SQLEXPRESS; must not change
通过1:
$ sh -c "sed 's/\\.\\\\\\\\SQLEXPRESS/CHANGED/' file"
Server=CHANGED; must change
Server=x\\SQLEXPRESS; must not change
通过2:
$ sh -c "sed 's/[.][\\][\\]SQLEXPRESS/CHANGED/' file"
Server=CHANGED; must change
Server=x\\SQLEXPRESS; must not change
当添加像
[...]
这样的调用额外层时,您只需将引号加倍或将它们放在括号表达式中 sh -c
即可添加额外的脚本解释过程。
现在问题已经清楚了,这就是您最初要求做的事情(没有“kitty launch”的东西):
$ cat file
Server=.\\SQLEXPRESS;Database=Testing;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;
$ sh -c "sed 's/Server=[.][\\][\\]SQLEXPRESS;Database=Testing;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;/Data Source=localhost;Database=Testing123;User Id=sa;Password=MyPassword\/*-432;MultipleActiveResultSets=true;Encrypt=false;/g' file"
Data Source=localhost;Database=Testing123;User Id=sa;Password=MyPassword/*-432;MultipleActiveResultSets=true;Encrypt=false;