我想改进我的 bash 脚本,以便它能用波兰语打开新标签页并显示术语表达。我希望它能与 Linux 兼容。
我能对 bash 脚本进行哪些反射操作?
“ en_dictionary.sh ”(MVE刚刚添加,第一个修正是向下条目,向下滚动)
#!/bin/bash
url="https://www.diki.pl/slownik-angielskiego?q="
for e in $(cat lst-pl_wrds.txt)
do
for o in $e
do
url="${url}${o}&end"
firefox --new-tab "$url" & timeout 1 >nul
done
done
上面的例子虽然语法正确,但由于它是一个傀儡,所以无法完成我们想象的任务。它只是功能概述。
为了激发人们对其应如何运作的想象力,我将展示在 Windows 下完全可运行的批处理脚本。
“ en_true_up.bat ” (来自另一个操作系统的工作示例)
@ECHO OFF
SETLOCAL
REM remember set "Encoding" to "ANSI" for "lst-pl_wrds.txt"
chcp 1250
fOR /f "delims=" %%e IN ('type "lst-pl_wrds.txt"') DO FOR %%o iN (%%e) do start "%%o" /d "C:\Program Files\Mozilla Firefox" firefox.exe "https://www.diki.pl/slownik-angielskiego?q=%%o&end"&timeout /t 1 >nul
GOTO :EOF
“ lst-pl_wrds.txt ”
łódka dwa trzy cztery piec
基于工作批处理脚本和虚拟 bash 可以创建适当的 bash 指令,具有与 Windows 相同的功能?
我想要什么? Linux 下带字典的工作脚本。能够高效转换和修改脚本的东西。
您提出的解决方案也可以具有特定系统独有的 UNIX 家族特性。
我在开发过程中也发现了一些有用的材料:
xargs -a ff_url.txt firefox -new-tab "$line"
来源: https: //superuser.com/questions/829117/open-a-new-tab-window-in-an-existing-firefox-instance-on-linux
补充:https://wiki.mozilla.org/Firefox/CommandLineOptions
祝您谜题有趣成功。感谢您的任何建议和评论。
从更广阔的角度看,有没有好的解决方案?
祝你好运。
MCVE 刚刚编辑:
在这种情况下,应该保存的脚本和所需的文件应该en_dictionary.sh
返回工作选项卡,但事实并非如此。lst-pl_wrds.txt
UTF-8
执行上述sh
脚本将返回带有以下内容的选项卡,URLs
并且其顺序是随机的,这不是预期的行为,并且字符串无效:
(1) https://www.diki.pl/slownik-angielskiego?q=%C5%82%C3%B3dka&end (?q=łódka&end)
(2) https://www.diki.pl/slownik-angielskiego?q=%C5%82%C3%B3dka&enddwa&endtrzy&endcztery&endpiec&end (?q=łódka&end&enddwa&endtrzy&endcztery&endpiec&end)
(3) https://www.diki.pl/slownik-angielskiego?q=%C5%82%C3%B3dka&enddwa&endtrzy&endcztery&end (?q=łódka&end&enddwa&endtrzy&endcztery&end)
(4) https://www.diki.pl/slownik-angielskiego?q=%C5%82%C3%B3dka&enddwa&end (?q=łódka&end&enddwa&end)
(5) https://www.diki.pl/slownik-angielskiego?q=%C5%82%C3%B3dka&enddwa&endtrzy&end (?q=łódka&end&enddwa&endtrzy&end)
我希望en_dictionary.sh
修复和改进脚本,以便执行该脚本时会在 Firefox 浏览器中打开以下选项卡,并且最好保持其顺序。这是我期望的行为:
https://www.diki.pl/slownik-angielskiego?q=łódka&end
https://www.diki.pl/slownik-angielskiego?q=dwa&end
https://www.diki.pl/slownik-angielskiego?q=trzy&end
https://www.diki.pl/slownik-angielskiego?q=cztery&end
https://www.diki.pl/slownik-angielskiego?q=piec&end
对我来说最重要的是脚本执行的效果和正确的结果。方法并不重要。我期望上述操作。
我想再指出两个关于这个有缺陷的脚本运行的小事实,这是意料之外的。终端中出现错误,提示在目标目录中Try 'timeout --help' for more information.
创建一个nul
文件,但事实不应该如此。
我希望这些信息是完整的,并且将有助于创建一个工作en_dictionary.sh
文件,这是该主题的目的。
设置:
笔记:
修改OP的脚本来打印一些调试信息:
运行脚本会生成:
从此输出中需要注意两点:
e
变量只包含一个字符串,但从代码(for o in $e
)来看,OP 似乎需要多个字符串for e in $(cat lst-pl_wrds.txt)
是实际上变成了for e in łódka dwa trzy cztery piec rok jutro
(所有单词放在一行上,用一个空格作为分隔符)url
不断将每个新单词附加url
到前一个值的末尾url="${url}${o}&end"
使用相同的变量url
修改我们当前的测试脚本以解决上述问题:
修改后的脚本生成:
从这个输出我们可以看到:
ar[]
被从输入文件中的一行重新填充url
不再将多个单词附加在一起将这些修改纳入 OP 的当前脚本中:
笔记:
>nul
是为了丢弃/忽略来自调用的标准输出firefox
;在这种情况下,unix/linux 的等效项是>/dev/null
firefox
不包含任何与“超时”相关的内容,因此我假设 OP 的意图是在每次firefox
调用之间等待 1 秒;如果这个假设是错误的,那么 OP 可以firefox
根据需要修改调用(并删除sleep 1
?),&
调用结束时firefox
会将调用置于后台测试结果:
brave-browser
所以我用替换firefox ...
了brave-browser "${url}" > /dev/null &
brave-browser
当我运行脚本时,它会在活动窗口(即我输入此答案的窗口)中以 1 秒的间隔打开新选项卡brave-browser
;每个选项卡代表一个单词,并且选项卡的显示顺序与从文件中读取的顺序相同:笔记:
piec
在jutro
这个例子中),那么可能是文件包含 windows/dos 行尾的问题(\r\n
)od -c lst-pl_wrds.txt
,如果输出包含\r
条目,则确认文件中存在 windows/dos 行尾dos2unix lst-pl_wrds.txt
;这只需要运行一次,因为它将编辑文件并删除\r
字符