AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[bash](coding)

Martin Hope
user19315471
Asked: 2025-04-28 02:16:13 +0800 CST

交互式流程背景与脚本之间的区别

  • 6

以交互方式运行后sleep 10 &立即关闭运行该命令的终端,该sleep命令将在 10 秒之前终止。

但是当这个命令被放入脚本时:

# this is a file named testfile.sh
sleep 10 &

然后作为执行bash testfile.sh,sleep即使终端关闭后,命令仍会持续执行直至完成。

为什么在一种情况下sleep终端关闭后立即停止,而在另一种情况下它继续执行?

bash
  • 1 个回答
  • 45 Views
Martin Hope
Serge
Asked: 2025-04-27 02:17:50 +0800 CST

使用预定义选项启动交互式 bash,但保存交互性

  • 7

在日志中搜索的最简单的交互式脚本

#!/bin/bash
# Starting - sh /tmp/czr.sh
printf "1 - Option 1\n2 - Option 2\n";
read -r select
if [ $select = "1" ] ; then
    echo "Option 1 do nothing" ;
fi
if [ $select = "2" ] ; then
    echo -n "Type what to find: "
    read -r typed
    cat /var/log/httpd/maps_error_log | grep -i "$typed" --color
fi
exit
sh

我想启动一个预定义选项 2 的

echo "2" | sh /tmp/czr.sh

但是这样的命令没有提供输入我想要查找的内容的选项 - 它只是打开整个日志文件。

(好像 echo“2”不仅传递了“2 - 选项 2”的选择,还传递了“Enter”命令)。

是否可以使用预选选项 2 来启动上面的 bash,但仍允许输入我想要查找的内容(保存交互性)?

bash
  • 2 个回答
  • 45 Views
Martin Hope
burki
Asked: 2025-04-24 15:21:23 +0800 CST

如何替换 yq split 的动态目标文件名中的禁用字符

  • 5

我想用 mikefarah/yq 将一个 k8s 资源文件拆分成每个资源的独立文件。显然,新文件的目标文件名必须是动态的。

K8s 资源的一个非常明显的命名方案是 [kind-name]。所以我想到了这个命令。

 yq '.items[]' my-file.yaml -s '.kind + "-" + .metadata.name'

但是 K8S 名称可能包含文件名中不允许的字符,例如冒号。如果发生这种情况,我会收到此错误

错误:打开 ClusterRole-system:[...].yml:文件名、目录名或卷标语法不正确。

有没有办法替换动态目标文件名中的字符?

bash
  • 1 个回答
  • 47 Views
Martin Hope
user19315471
Asked: 2025-04-24 06:01:37 +0800 CST

将嵌套的 Bash shell 置于后台

  • 6

我可以在 Bash 中的命令之间来回切换:

$ vim
CTRL-Z
# vim is in background now
# can resume it with:
$ fg

我试图用嵌套的 shell 做同样的事情,但是没有效果:

# launch nested Bash shell:
$ bash
CTRL-Z
# still in nested shell...

是否可以像示例一样将嵌套的shell置于后台并返回到父shell vim?
如果不可能,那么原因是什么?

bash
  • 1 个回答
  • 83 Views
Martin Hope
vamsiampolu
Asked: 2025-04-10 20:04:14 +0800 CST

解码 base64 字符串并使用 xxd 将其编码为十六进制

  • 8

首先,我获取一个 base64 编码的字符串并对其进行解码:

local base64_str="OQbb8rXnj/DwvglW018uP/1tqldwiJMbjxBhX7ZqwTw="
echo "${base64_str}" | base64 --decode > foo.txt

二进制文件的大小为 32 字节,基于:wc -c < foo.txt

我使用xxd将文件中的值编码为十六进制格式:

xxd -p ./foo.txt ./foo.hex.txt

文件 foo.hex.txt 中的十六进制值为:

3906dbf2b5e78ff0f0be0956d35f2e3ffd6daa577088931b8f10615fb66a
c13c

编码哈希文件的大小为 66 字节,使用wc -c < foo.hex.txt

我想将 base64 字符串转换为十六进制,使其保留为 32 字节字符串,以便我可以与 openssl 一起使用 aes-256 密码进行加密和解密。

local iv_hex=$(base64_to_hex "${iv}")
local key_hex=$(base64_to_hex "${key}")

openssl enc -aes-256-ctr -K "${key_hex}" -iv "${iv_hex}" -in "${input_file}" -out "${output_file}"
bash
  • 2 个回答
  • 111 Views
Martin Hope
usdn
Asked: 2025-04-04 08:23:50 +0800 CST

podman 入口点 - crun:在 $PATH 中未找到可执行文件

  • 4

问题

我(拼命地)尝试在 podman 中复制此 mlflow/minio 设置:https://github.com/minio/blog-assets/blob/main/mlflow-minio-setup/docker-compose.yml。本教程在 VM 中使用 docker-compose 运行良好。

然而,在 podman 中,我根本无法弄清楚如何执行脚本以在 minio 中自动创建存储桶。我尝试了 --entrypoint 选项的许多可能组合,但总是失败:Error: crun: executable file [/bin/sh,-c,/create_bucket.sh] not found in $PATH: No such file or directory: OCI runtime attempted to invoke a command that was not found...

我的配置

创建存储桶:

#!/bin/sh
sleep 5;
/usr/bin/mc config host add mlflow_minio_storage http://mlflow_minio_storage:9000 "$MINIO_ACCESS_KEY" "$MINIO_SECRET_ACCESS_KEY" --api S3v4;
/usr/bin/mc ls mlflow_minio_storage | grep -q challenge || /usr/bin/mc mb mlflow_minio_storage/mlflow;
/usr/bin/mc policy download mlflow_minio_storage/mlflow;
exit 0;

Dockerfile:

FROM docker.io/minio/mc

COPY create_bucket.sh /create_bucket.sh
RUN chmod +x /create_bucket.sh

podman 运行:

podman build -t minio_client:latest -f Containerfile
podman run \
--name=mlflow_minio_client \
--detach \
--secret=MINIO_ACCESS_KEY,type=env,target=MINIO_ACCESS_KEY \
--secret=MINIO_SECRET_ACCESS_KEY,type=env,target=MINIO_SECRET_ACCESS_KEY \
--net mlflow_net \
--network-alias mlflow_minio_client \
--restart always \
--requires mlflow_minio_storage \
--entrypoint ["/bin/sh","-c","/create_bucket.sh"] \
localhost/minio_client:latest

最小示例

即使这种简单的情况也会导致相同的错误。我是不是误解了什么?

podman run \
--entrypoint ["/bin/sh","-c","/usr/bin/mc version"] \
docker.io/minio/mc:latest
>>> Error: crun: executable file `[/bin/sh,-c,/usr/bin/mc version]` not found in $PATH: No such file or directory: OCI runtime attempted to invoke a command that was not found
bash
  • 1 个回答
  • 28 Views
Martin Hope
localhost
Asked: 2025-04-03 11:49:58 +0800 CST

为什么我使用 flock 的计数器会随机重置?

  • 6

我试图理解为什么我似乎无法成功实现用于flock避免竞争条件的计数器。

我flock从这个 SO 答案中复制了代码。

计数器似乎会随机重置,尽管我不明白为什么它会这样做。counter inc应该永远自动计数。

我的代码旨在让我能够使用同时处理多个文件GNU parallel,但是使用包含递增计数器的每个处理文件来更新状态行。

该计数器保存到由 创建的 RAM 中的临时文件中mktemp。

我在这里把它剪短了,所以它只是一个应该永远计数的无限循环,但它会不断重置。

谁能向我解释为什么计数器有时会重置?

#!/bin/bash

clear_line () {
    echo -ne "\r\033[K"
}

counter () {
  {
    flock -s 200
    read numfiles < "$countfile"
    if [ "$1" = "inc" ]; then
        ((numfiles++))
    fi
    if [ "$1" = "rst" ]; then
        numfiles=0
    fi
    if [ "$1" = "get" ]; then
        echo "$numfiles"
    fi
    echo "$numfiles" > "$countfile"
  } 200> "$countlockfile"
}

process () {
    counter inc
    currfileno=$(counter get)

    clear_line
    echo -n "$currfileno"
}

# from https://unix.stackexchange.com/a/29918/52247
tmpdir=
cleanup () {
  trap - EXIT
  if [ -n "$tmpdir" ] ; then rm -rf "$tmpdir"; fi
  if [ -n "$1" ]; then trap - $1; kill -$1 $$; fi
}
tmpdir=$(mktemp -dt "$(basename $0).XXXXXXXX" --tmpdir=/run/user/$(id -u)) || exit 1
countfile=$(mktemp -t "counter.XXXXXXXX" --tmpdir=$tmpdir) || exit 1
countlockfile=$(mktemp -t "countlockfile.XXXXXXXX" --tmpdir=$tmpdir) || exit 1

trap 'cleanup' EXIT
trap 'cleanup HUP' HUP
trap 'cleanup TERM' TERM
trap 'cleanup INT' INT

export -f clear_line
export -f process
export -f counter
export countfile
export countlockfile

counter rst
while :
do
    echo whatever
done | parallel process
bash
  • 2 个回答
  • 51 Views
Martin Hope
Christian Bongiorno
Asked: 2025-03-29 09:46:55 +0800 CST

为什么在此脚本中使用空分隔符时 printf 会以 1 退出?

  • 5

我有这个脚本,它似乎printf '%s\0%s\0'以代码 1 退出,我不明白为什么。

我甚至强迫它使用 bash 版本 5.2 - 结果相同。

以下是示例脚本及其输出

#!/usr/bin/env bash
echo $BASH_VERSION
set -x
set -Eeuo pipefail

function prompt_creds {
  local username password
  read -rp "username " username
  read -rsp "password " password 
  printf '%s\0%s\0' "${username}" "${password}"
}

function main() {
  IFS=$'\0' read -r username password < <(prompt_creds )
  echo "name name is ${username}" "my password is ${password}"
}

main

使用和输出

./sample.sh 
3.2.57(1)-release
+ set -Eeuo pipefail
+ main
+ IFS=
+ read -r username password
++ prompt_creds
++ local username password
++ read -rp 'username ' username
username user
++ read -rsp 'password ' password
password ++ printf '%s\0%s\0' user pass
bash-5.2$ echo $?
1

我甚至尝试在 CLI 上简单运行它,并且它可以工作:

bash-5.2$ IFS=$'\0' read -r u p < <(printf '%s\0%s\0' user pass)
bash-5.2$ echo $u $p
userpass
bash
  • 2 个回答
  • 79 Views
Martin Hope
NetRanger
Asked: 2025-03-29 00:40:20 +0800 CST

使用 Linux bash 循环在 csv 文件的逗号后附加文本

  • 8

我需要使用 bash 修改 csv 文件。

输入(csv 文件):

firstletter="s"
surname="houston"
emaildomain"@zzz.com"
input=$(cat 1.csv)

1.csv:

1,1,Susan houston,Director of Services,,
2,1,Christina Gonzalez,Director,,
3,2,Brenda brown,"Director, Second Career Services",,

如何使用 Linux bash 在最后两个逗号之间添加文本?​​我尝试了以下方法:

for i in $(cat $input);do
        sed -i "s/,$/${firstletter}${surname}${emaildomain},/g" $i;
done

但是,这会导致错误: sed: -e expression #1, char 5: unterminated `s' command

预期输出:

1,1,Susan houston,Director of Services,[email protected],
2,1,Christina Gonzalez,Director,[email protected],
3,2,Brenda brown,"Director, Second Career Services",[email protected],
bash
  • 3 个回答
  • 79 Views
Martin Hope
Alex
Asked: 2025-03-28 17:55:46 +0800 CST

为什么这个 bash 脚本在 ubuntu 上失败?

  • 5

在 ubuntu 上我运行以下脚本(为了测试目的,该脚本应该随机失败或成功):

if [ "$RANDOM" -gt 16384 ]; then
    echo "Success!"
    exit 0
else
    echo "Failure!"
    exit 1
fi

和

sh random.sh

但它失败了

random.sh: 1: [: Illegal number: 
Failure!

问题的原因是什么?

bash
  • 1 个回答
  • 50 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve