我\xe2\x80\x99m编写了一个名为video2png的简单bash脚本,使用ffmpeg将视频的某些帧转换为png:
#!/bin/bash\nffmpeg -ss 30:00 -i "$1" -frames 1 -s 1280x880 -f image2 "$2"\nRun Code Online (Sandbox Code Playgroud)\n我将视频路径和所需的输出路径作为第一个和第二个参数传递给脚本。正如您在脚本中看到的,我通过"$1"和获得了这两条路径"$2"。\n我在 Mac 上的终端中运行该脚本,如下所示:
Path1="/Users/jintai/Downloads/demon/a b/demon.mp4"\nPath2="/Users/jintai/Downloads/demon/a b/demon.png"\nbash video2png "$Path1" "$Path2" \nRun Code Online (Sandbox Code Playgroud)\n-frames但是,脚本中的标志参数似乎ffmpeg被误解为视频路径下的文件,因为我收到以下错误消息:
Trailing option(s) found in the command: may be ignored.\n-frames: No such file or directory\nRun Code Online (Sandbox Code Playgroud)\n我该如何解决这个问题?感谢您的时间和建议!
\n编辑:根据@muru的建议,我用-xafter运行我的脚本bash。但问题仍然在这里。这是我的运行和所有输出:
(base) jintai@192 missing % bash -x video2png "$Path1" "$Path2" \n+ ffmpeg -ss 30:00 -i -frames 1 -s …Run Code Online (Sandbox Code Playgroud) 我使用 .sh 脚本来读取控制器已安装的固件,并将其与可用固件进行比较(如果需要,还可以在控制器上进行更新)。
为了确保读出有效,我想测试子字符串“ERROR”的响应字符串(由从控制器读取的单独脚本创建)。
我尝试了多种方法来测试子字符串,但到目前为止没有任何效果。我发现的大多数来源都使用 bash,使搜索变得复杂。
编辑:“完整”相关代码
MCU_VER=$($PRG)
echo "SubMCU Firmware version readout:" >> /tmp/version_test_log.txt
echo $MCU_VER >> /tmp/version_test_log.txt
case "$MCU_VER" in
*"ERROR"*)
echo "Error" >> /tmp/version_test_log.txt
FW_READ=0;;
*)
echo "Success" >> /tmp/version_test_log.txt
FW_READ=1;;
esac
let LOOP_CNT=LOOP_CNT+1
echo "Loop count:" >> /tmp/version_test_log.txt
echo $LOOP_CNT >> /tmp/version_test_log.txt
echo "Readout state:" >> /tmp/version_test_log.txt
echo $FW_READ >> /tmp/version_test_log.txt
Run Code Online (Sandbox Code Playgroud)
日志文件如下所示:
SubMCU Firmware version readout:
ERROR: Failed to init GPIO output pin 77
Success
Loop count:
1
Readout state:
1
Run Code Online (Sandbox Code Playgroud)
编辑:代码现在可以工作了。解决方案是案例构造。
在 bash 中我可以这样做:
#!/bin/bash
validate() {
if [[ "$BASH_COMMAND" == whoami ]]; then
return 1
else
return 0
fi
}
set -T
trap 'validate' DEBUG
shopt -s extdebug
Run Code Online (Sandbox Code Playgroud)
这样如果我运行whoami什么也不会发生。
我怎样才能在 zsh 中实现相同的目标?我看过但在文档preexec中找不到太多信息
测试用例:(使用非 root 用户,因为 root 会忽略 000 权限...)
#in a clean directory:
[ -f file_1 ] && chmod 600 file_? # for repeat tests...
for i in file_1 file_2 file_3; do
printf 'A\nB\n' > "$i"
# we need at least 1 char : awk/gawk silently skips empty files...
done
chmod 000 file_2
awk '(FNR==1) { print FILENAME }' file_?
# tried with : regular (old unixes) awk on AIX. and gawk on Linux.
# the fatal "permission denied" on file_2 stops …Run Code Online (Sandbox Code Playgroud) 我有一个由目录中所有文件生成的文本文件。我想使用此文件作为我拥有的脚本的输入,但我需要以特定方式格式化文本文件才能正确解析。
目前,文本文件(文件名列表)的格式如下:
A1_R1.fastq.gz
A1_R2.fastq.gz
A2_R1.fastq.gz
A2_R2.fastq.gz
A3_R1.fastq.gz
A3_R2.fastq.gz
Run Code Online (Sandbox Code Playgroud)
我需要每个样本的配对读取(具有相同名称但不同RN值的文件)位于同一行,并用制表符分隔:
A1_R1.fastq.gz A1_R2.fastq.gz
A2_R1.fastq.gz A2_R2.fastq.gz
A3_R1.fastq.gz A3_R2.fastq.gz
Run Code Online (Sandbox Code Playgroud)
由于我有 >1000 个条目,我希望有一种使用 awk 或类似方法来修改文件的方法,但我对 awk 没有太多经验。
我知道这不是一个描述性很强的标题(欢迎提出建议),但事实是我已经为此烦恼了好几个小时,而且我不知道问题的根源可能在哪里。
我为本地网络上的对等点之间的 CLI 聊天编写了一个简单的 Bash 脚本:
#!/usr/bin/env bash
# Usage: ./lanchat <local_ip>:<local_port> <remote_ip>:<remote_port>
# set -x
set -o errexit -o nounset -o pipefail
IFS=':' read -a socket <<< "$1"
LOCAL_IP=${socket[0]}
LOCAL_PORT=${socket[1]}
IFS=':' read -a socket <<< "$2"
REMOTE_IP=${socket[0]}
REMOTE_PORT=${socket[1]}
RECV_FIFO=".tmp.lanchat"
trap "rm '$RECV_FIFO'; kill 0" EXIT
mkfifo "$RECV_FIFO"
# EDIT: As per @Kamil Maciorowski's suggestion, removing the `-q 0` part below solves the issue.
while true; do nc -n -l -q 0 -s "$LOCAL_IP" -p "$LOCAL_PORT" > "$RECV_FIFO"; done & …Run Code Online (Sandbox Code Playgroud) 我有一个包含 1200 万行的 csv 文件,格式如下:
mcu_i,INIT,200,iFlash, 11593925, 88347,,0x00092684,r,0x4606b570, ok,, 32,single,op-c,0,, 0, 0, 0,
mcu_i,INIT,200,iFlash, 11593931, 88348,,0x00092678,r,0x28003801, ok,, 32,single,op-c,0,, 0, 0, 0,
Run Code Online (Sandbox Code Playgroud)
我想使用以下逻辑根据第六列的值删除行: if (value >= X AND value <= Y ) => 删除行
我使用 gawk 找到了一个解决方案:
gawk -i inplace -F ',' -v s="$start_marker" -v e="$end_marker" '!($6 <= e && $6 >= s)' myfile.csv
Run Code Online (Sandbox Code Playgroud)
但这需要太长时间,我想要另一个性能更好的解决方案。
谢谢
I created a very simple C project and want to build a debian package from it.\nManually building the C project via the Makefile works as expected, it build the binary and can be installed in /usr/local/bin. When trying to build a debian packages however it fails with\ndh_usrlocal: error: debian/myhelloworld/usr/local/bin/myhelloworld is not a directory
The Makefile looks like this:
\nprefix = /usr/local/bin\n\nall: src/myhelloworld\n\nsrc/hello: src/myhelloworld.c\n @echo "CFLAGS=$(CFLAGS)" | \\\n fold -s -w 70 | \\\n sed -e 's/^/# /'\n …Run Code Online (Sandbox Code Playgroud) 为了构建我的主板的 u-boot,我遵循了以下两个命令:
$ sudo make nanopi_h3_defconfig ARCH=arm CROSS_COMPILE=arm-linux-
$ sudo make ARCH=arm CROSS_COMPILE=arm-linux-
Run Code Online (Sandbox Code Playgroud)
我从第一个命令得到结果:配置写入.config 这意味着成功。但从第二个命令得到以下内容:
make: arm-linux-gcc: No such file or directory
/bin/sh: 1: arm-linux-gcc: not found
dirname: missing operand
Try 'dirname --help' for more information.
scripts/kconfig/conf --silentoldconfig Kconfig
./scripts/binutils-version.sh: line 18: arm-linux-as: command not found
CHK include/config.h
CFG u-boot.cfg
/bin/sh: 1: arm-linux-gcc: not found
make[1]: *** [scripts/Makefile.autoconf:79: u-boot.cfg] Error 1
make: *** No rule to make target 'include/config/auto.conf', needed by 'include/config/uboot.release'. Stop.
Run Code Online (Sandbox Code Playgroud)
似乎来自arm-linux-gcc的麻烦,但我运行了命令“arm-linux-gcc”,它有效。那么,为什么第一个命令可以通过arm-linux-gcc,而第二个命令却失败了呢?
这是我的简单问题,如何从命令行将半角转换为全角。我认为这将内置在我的iconv命令行中,但我在这里没有找到任何内容:
$ iconv -l | grep -i full\n-> nothing\n$ iconv -l | grep -i half\n-> nothing\nRun Code Online (Sandbox Code Playgroud)\n典型的输入是:
\n$ echo -n "\xef\xbc\xa1b\xef\xbc\x99\xef\xbc\x98\xef\xbc\x97\xef\xbc\x96\xef\xbc\x95\xef\xbc\x94\xef\xbc\x93\xef\xbc\x92\xef\xbc\x91\xef\xbc\x90" | iconv -f utf8 -t utf16be | hexdump -C\n00000000 ff 21 00 62 ff 19 ff 18 ff 17 ff 16 ff 15 ff 14 |.!.b............|\n00000010 ff 13 ff 12 ff 11 ff 10 |........|\n00000018\nRun Code Online (Sandbox Code Playgroud)\n