我正在尝试在我的 bash 脚本中使用jq 解析器,但我对它的工作方式感到困惑,有人可以解释一下我做错了什么吗?
这是来自外部服务的原始文件,我需要从中获取value:
root@test ~ # cat test.json
{"sensors":[{"id":34585,"value":-3.06,"time":1457031003}]}
Run Code Online (Sandbox Code Playgroud)
尝试将其发送至jq:
root@test ~ # cat narod.json | jq
{
"sensors": [
{
"id": 34585,
"value": -3.06,
"time": 1457031003
}
]
}
Run Code Online (Sandbox Code Playgroud)
试图获得sensors:
root@test ~ # cat narod.json | jq '.sensors'
[
{
"id": 34585,
"value": -3.06,
"time": 1457031003
}
]
Run Code Online (Sandbox Code Playgroud)
试图value从sensors:
root@test ~ # cat narod.json | jq '.sensors.value'
jq: error (at <stdin>:0): Cannot index array with …Run Code Online (Sandbox Code Playgroud) 我有点问题。
我有一个文件,托管在远程服务器 ( http://mywebsite/file.zip ) 上。我还有一些嵌入式 linux 机器(运行 openelec OS)。这些盒子的命令相当有限,但它们仍然具有基本的 - curl、bash 等。它们都存储了文件(/storage/file.zip)
我想要做的是 - 我需要设置一个脚本,该脚本在设备完全启动后的第一分钟内执行,并且它可能会使用 curl 检查远程服务器文件(mywebsite/file.zip)是否为比本地的 (/storage/file.zip) 新,并且如果它更新而不是下载它 - 它需要执行一个 bash 脚本 (/storage/scripts/script.sh)
我通常使用这个命令“curl -o /storage/file.zip -z /storage/file.zip http://website/file.zip ”但我不知道如何让它执行脚本,而不是下载文件。甚至不确定这是否可能。
非常感谢所有帮助!
另外,为了确保 - 只有在 localfile 比 remotefile 旧时才需要执行。如果 localfile 比 remotefile 新 - 它不需要执行脚本,因为执行的脚本也在从服务器下载远程文件,因此在执行后 - localfile 将具有更新的时间戳,如果未指定,该脚本仅在较新的远程文件上执行 - 它可能会以无限循环结束。
我正狂热地按CTRL+R来查找我不久前使用过的一些命令,但突然间我找到了它。通过反射,我继续点击CTRL+ R,将它传递给 shell 历史中更远的东西。如何返回我刚刚通过的命令,而不必重新开始整个搜索?
Cygwin 中是否有配置选项,以便在 Bash 完成命令名称时,.exe忽略(不包括)文件名的后缀?
在 Cygwin 系统上的 Bash 中使用 Tab 补全来补全命令的名称时,.exe扩展名会附加到命令名称,例如,键入opens并按下Tab将命令补全到openssl.exe.
该命令运行良好(对于 MS Windows,.exe在运行命令时扩展是可选的)但问题是包_openssl()提供的完成功能bash-completion仅配置为提供openssl- 不是openssl.exe. 例如:
$ complete -p openssl openssl.exe
complete -o default -F _openssl openssl
bash: complete: openssl.exe: no completion specification
Run Code Online (Sandbox Code Playgroud)
尝试完成所有可执行命令的参数时存在相同的问题。
我目前将 Bash 与 Emacs 模式配置用于 Readline 编辑,因此我可以在开始键入命令的参数之前按下Esc后按两次Backspace以删除.exe后缀。理想情况下,我希望避免每次运行命令时都必须这样做。
我认为如果不修改 Cygwin DLL 或 Bash 命令完成 ( pcomplete.c)的源代码,这可能是不可能的。然而,我注意到,在Bash内建命令, …
你如何看待一个命令?
awk 'NR%2==0 {printf "%s %8.0f", $1, $5}' filename.txt
Run Code Online (Sandbox Code Playgroud)
在此之前加上“watch”给出了这个错误:
awk: cmd. line:1: fatal: cannot open file `{printf' for reading (No such file or directory)
Run Code Online (Sandbox Code Playgroud)
答案是:使用带有引号的参数的 watch 命令是通过将 $ 符号替换为 \$ 来对 $ 符号进行转义。但这给了我错误:
sh: -c: line 0: syntax error near unexpected token `('
sh: -c: line 0:
Run Code Online (Sandbox Code Playgroud)
我想在对该问题的评论中提出这个问题,但没有足够的分数来发表评论。
在这种情况下,对他们有用的答案不起作用的类似问题:
1)https://askubuntu.com/questions/500217/how-to-properly-quote-piped-command-for-watch(答案再次转义$符号)。
2)、3) 和 4) 列在评论中,因为我不能在没有 10 点声誉的情况下发布超过 2 个链接。
我可以通过编辑文件在 Ubuntu 中执行以下操作:
/etc/rc.local
Run Code Online (Sandbox Code Playgroud)
并添加:
IP=$(/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
echo "IP: $IP" > /etc/issue
Run Code Online (Sandbox Code Playgroud)
在 Arch 中,这个文件不存在“/etc/rc.local”,经过一番搜索,我发现我必须创建这个文件:
/etc/systemd/system/rc-local.service
Run Code Online (Sandbox Code Playgroud)
内容:
[Unit]
Description=/etc/rc.local compatibility
[Service]
Type=oneshot
ExecStart=/etc/rc.local
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
然后创建“/etc/rc.local”。
内容:
IP=$(/sbin/ip route get 1 | awk '{print $NF;exit}')
echo "IP: $IP" > /etc/issue
exit 0
Run Code Online (Sandbox Code Playgroud)
然后使其可执行:
sudo chmod +x /etc/rc.local
Run Code Online (Sandbox Code Playgroud)
最后开始/测试:
sudo systemctl start rc-local.service
Run Code Online (Sandbox Code Playgroud)
得到错误:
Job for rc-local.service failed because the control process exited with …Run Code Online (Sandbox Code Playgroud) 我仍在处理另一个问题中的错误,由于无法获得调试信息,该错误没有得到解答。
我有运行其他脚本的脚本,我需要查看 tty 如何与终端断开连接。
有没有办法全局“设置-x”?我无法在问题脚本中设置它,因为它是动态生成的,不是我自己生成的,但我想看看它有什么问题。
我通常在作为虚拟机的多个远程主机上使用 SSH,并每 5-6 天重新创建一次。一旦我销毁并重新创建它们,我就会丢失这些 VM 中的所有 bash 历史记录。
有没有办法可以共享 bash 历史记录并在将来重新使用它?(类似于 Dropbox 但仅适用于 bash_history 文件)
我在路径中选择了 Nemo 中的 4 个文件/home/myUsername/.local/share/nemo/scripts/Folder with spaces/。Nemo 将文件路径存储在环境变量中NEMO_SCRIPT_SELECTED_FILE_PATHS。
(正如您在glenn jackman下面的答案中所见,NEMO_SCRIPT_SELECTED_FILE_PATHS包含一个以换行符分隔的文件路径列表。)
为什么是“是啊!” 不是在每个文件路径行之后打印?我怎样才能做到这一点?(这个问题可能很烦人,因为我最初认为这个文件路径列表是一个数组,但显然不是。)
脚本
#!/bin/bash
for i in "${NEMO_SCRIPT_SELECTED_FILE_PATHS[@]}"
do
echo "$i"
echo "Yeah!"
done
Run Code Online (Sandbox Code Playgroud)
输出
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script1
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script2
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script3
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script4
Yeah!
Run Code Online (Sandbox Code Playgroud) 内容source.txt:
gold green white black blue
yellow magenta brown
tram kilo charlie tango
Run Code Online (Sandbox Code Playgroud)
嗨,大家好!我需要解开一个谜。
我正在尝试运行一个小脚本来 grep 文件source.txt,管道grep输出以sed替换字符串并将该行存储在新文件中pol.txt
grep -l "gold" source.txt | xargs sed 's/green/red/' > pol.txt
Run Code Online (Sandbox Code Playgroud)
而不是将唯一的那行存储在pol.txt:
gold red white black blue
Run Code Online (Sandbox Code Playgroud)
我有整个文件本身和我替换的字符串
gold red white black blue
yellow magenta brown
tram kilo charlie tango
Run Code Online (Sandbox Code Playgroud)
当我-l从 grep 命令中删除选项时,我有这个,当然 pol.txt 中没有任何内容
sed: can't read gold: No such file or directory
sed: can't read green: No such file …Run Code Online (Sandbox Code Playgroud)