问题列表 - 第5557页

bash 脚本中的标志参数被误解为文件,“没有这样的文件或目录”

我\xe2\x80\x99m编写了一个名为video2png的简单bash脚本,使用ffmpeg将视频的某些帧转换为png:

\n
#!/bin/bash\nffmpeg -ss 30:00 -i "$1" -frames 1 -s 1280x880 -f image2 "$2"\n
Run Code Online (Sandbox Code Playgroud)\n

我将视频路径和所需的输出路径作为第一个和第二个参数传递给脚本。正如您在脚本中看到的,我通过"$1"和获得了这两条路径"$2"。\n我在 Mac 上的终端中运行该脚本,如下所示:

\n
Path1="/Users/jintai/Downloads/demon/a b/demon.mp4"\nPath2="/Users/jintai/Downloads/demon/a b/demon.png"\nbash video2png "$Path1" "$Path2" \n
Run Code Online (Sandbox Code Playgroud)\n

-frames但是,脚本中的标志参数似乎ffmpeg被误解为视频路径下的文件,因为我收到以下错误消息:

\n
Trailing option(s) found in the command: may be ignored.\n-frames: No such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n

我该如何解决这个问题?感谢您的时间和建议!

\n
\n

编辑:根据@muru的建议,我用-xafter运行我的脚本bash。但问题仍然在这里。这是我的运行和所有输出:

\n
(base) jintai@192 missing % bash -x video2png "$Path1" "$Path2" \n+ ffmpeg -ss 30:00 -i -frames 1 -s …
Run Code Online (Sandbox Code Playgroud)

bash ffmpeg shell-script

-1
推荐指数
1
解决办法
96
查看次数

测试 posix shell .sh 脚本中的子字符串(不是 bash)

我使用 .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)

编辑:代码现在可以工作了。解决方案是案例构造。

shell shell-script

-1
推荐指数
1
解决办法
87
查看次数

阻止命令在 zsh 中运行

在 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中找不到太多信息

bash zsh

3
推荐指数
1
解决办法
175
查看次数

awk(和 gawk):当 N 个输入文件中的 1 个不可读时如何避免致命错误

测试用例:(使用非 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)

awk

4
推荐指数
1
解决办法
400
查看次数

使用 awk 将新行替换为空格

我有一个由目录中所有文件生成的文本文件。我想使用此文件作为我拥有的脚本的输入,但我需要以特定方式格式化文本文件才能正确解析。

目前,文本文件(文件名列表)的格式如下:

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 没有太多经验。

awk text-processing bioinformatics

2
推荐指数
2
解决办法
843
查看次数

执行和获取 Bash 脚本之间出现奇怪的不一致

我知道这不是一个描述性很强的标题(欢迎提出建议),但事实是我已经为此烦恼了好几个小时,而且我不知道问题的根源可能在哪里。

我为本地网络上的对等点之间的 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)

bash shell-script nc

10
推荐指数
1
解决办法
1358
查看次数

根据列值从 csv 文件中删除行

我有一个包含 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)

但这需要太长时间,我想要另一个性能更好的解决方案。

谢谢

awk text-processing csv

4
推荐指数
2
解决办法
549
查看次数

Building debian package fails when destination is /usr/local/bin

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

\n

The Makefile looks like this:

\n
prefix = /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)

packaging debian

5
推荐指数
1
解决办法
309
查看次数

为什么会出现“arm-linux-gcc:未找到”这样的错误?

为了构建我的主板的 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,而第二个命令却失败了呢?

gnu-make

-1
推荐指数
1
解决办法
35
查看次数

如何将全角字符转换为半角字符(反之亦然)?

这是我的简单问题,如何从命令行将半角转换为全角。我认为这将内置在我的iconv命令行中,但我在这里没有找到任何内容:

\n
$ iconv  -l | grep -i full\n-> nothing\n$ iconv  -l | grep -i half\n-> nothing\n
Run 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\n
Run Code Online (Sandbox Code Playgroud)\n

character-encoding

3
推荐指数
1
解决办法
144
查看次数