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
    • 最新
    • 标签
主页 / user-413987

teeeeee's questions

Martin Hope
teeeeee
Asked: 2025-01-01 06:30:48 +0800 CST

如何使用docker exec在容器中执行带有参数的shell脚本?

  • 5

我的主机上有一个 shell 脚本,它正在调用另一个脚本在容器内运行。这是一个运行良好的简单案例:

主机脚本

#!/bin/sh

results=$(docker exec mycontainer "./scripts/container_script.sh")
echo $results

容器脚本

#!/bin/sh

echo "Hello World"

但是,现在我想使用输入参数来运行容器脚本。像这样:

主机脚本

#!/bin/sh

path="/some/other/path"
results=$(docker exec mycontainer "./scripts/container_script.sh $path")
echo $results

容器脚本

#!/bin/sh

echo "Hello World"
echo $1

这次我收到错误:

OCI 运行时执行失败:exec 失败:无法启动容器进程:exec:“。/scripts/container_script.sh /some/other/path”:stat ./scripts/container_script.sh /some/other/path:没有此文件或目录:未知

我如何在容器内向该脚本传递参数?

shell-script
  • 1 个回答
  • 30 Views
Martin Hope
teeeeee
Asked: 2024-12-24 06:01:36 +0800 CST

从 Bash 脚本中的 docker exec 命令的输出中获取多个变量?

  • 8

我想在主机上执行一个脚本(script_on_host.sh),然后该脚本进入docker容器内部,以便使用第二个脚本获取一些数据(script_in_container.sh。数据只能在容器内部获得,而不能直接从主机获得,因此才这样做。

我在两个脚本之间传递数据时遇到问题。我尝试了以下方法:

脚本_在_容器中

#!/bin/bash

x=1
y=2
z=6.3
echo $x
echo $y
echo $z

主机上的脚本

#!/bin/bash

results=$(docker exec mycontainer './script_in_container.sh')
X=$results(1)
Y=$results(2)
Z=$results(3)

但是它抛出了一个错误。有人能帮我吗?有没有一种更好的或更标准的方式来以这种方式传递变量?我觉得我在这里可能做得有点笨拙,使用 echo 从容器脚本中打印多行。

bash
  • 3 个回答
  • 25 Views
Martin Hope
teeeeee
Asked: 2024-10-13 04:11:42 +0800 CST

将 json 数据转换为逗号分隔的字符串

  • 5

我有一个具有未知数量变量的 json 对象,如下所示:

{ 
  "var1": 123, 
  "var2": 456, 
  "var3": 789 
}

我怎样才能自动将其转换为以下字符串?

'var1=123,var2=456,var3=789'

注意,我正在寻找不需要安装 jq 的解决方案。

bash
  • 3 个回答
  • 53 Views
Martin Hope
teeeeee
Asked: 2024-10-08 04:56:33 +0800 CST

为什么 tar 命令在提取 tar 文件时会创建此目录结构?

  • 6

我创建了这个简单的目录结构:

$ tree testdir/
testdir/
├── subdir1
│   ├── file1.txt
│   └── file2.txt
├── subdir2
│   ├── file3.txt
│   └── file4.txt

并希望将 testdir 的内容存档到 tar 文件中。因此我运行以下命令(注意排除是因为这个答案):

tar cvf /home/myuser/testdir/testdir_tarfile.tar --exclude=/home/myuser/testdir/testdir_tarfile.tar /home/myuser/testdir

现在我想再次提取文件(及其目录结构)。因此首先创建一个目标目录:

$ mkdir /home/myuser/testdir/target_dir

现在将 tar 文件解压到目标目录:

tar xf /home/myuser/testdir/testdir_tarfile.tar -C /home/myuser/testdir/target_dir/

生成的文件结构如下:

$ tree testdir/
testdir/
├── subdir1
│   ├── file1.txt
│   └── file2.txt
├── subdir2
│   ├── file3.txt
│   └── file4.txt
├── target_dir
│   └── home
│       └── myuser
│           └── testdir
│               ├── subdir1
│               │   ├── file1.txt
│               │   └── file2.txt
│               └── subdir2
│                   ├── file3.txt
│                   └── file4.txt
└── testdir_tarfile.tar

为什么目标目录现在包含子文件夹“home”和“myuser”?我希望它只包含“subdir1”和“subdir2”,即像原始存档目录一样。

linux
  • 1 个回答
  • 64 Views
Martin Hope
teeeeee
Asked: 2024-10-01 21:16:40 +0800 CST

Bash 脚本用于在第二个目录中复制并保存 x4 备份文件(每日、每周、每月、六个月)

  • 5

我有一个应用程序,它会在晚上 11 点在目录中自动进行每日备份dirA。每个备份都是一个 .tar 文件,并且有一个我无法控制的随机命名约定(例如129d3139.tar,4a98bb6b.tar等等)。

由于dirA存储在空间非常有限的存储介质上,我设置了一个 cron 任务,即五分钟后的晚上 11:05,删除除最新备份之外的所有备份。bash 脚本“ clear_old_backups.sh”如下所示,运行良好(感谢这个答案):

#!/usr/bin/env bash

find /path/to/dirA/ -type f -printf '%T@\t%p\n' |
sort -t $'\t' -g |
head -n -1 |
cut -d $'\t' -f 2- |
xargs -r rm

现在,我还想将一些较旧的存档备份保存在另一个更大的存储介质上的第二个目录中dirB。理想情况下,dirB我希望里面有 x4 个文件:

1 天大(只是存储在中的单个的直接复制dirA),然后另外还有 1 周大、1 个月大和 6 个月大。

有人能帮忙编写一个可以复制并保留相关备份文件的 bash 脚本吗?

我不知道从哪里开始——我是否需要以某种方式更定期地检查文件的时间戳是否已达到“现在减 7 天”等?然后才采取相应行动?

操作系统是 Debian 12。

bash
  • 1 个回答
  • 57 Views
Martin Hope
teeeeee
Asked: 2024-09-02 07:36:52 +0800 CST

Bash 脚本接受多个路径参数并检查是否可以在那里成功创建文件

  • 6

我想要一个 bash shell 脚本(适用于我的 Debian 12 系统),它接受多个路径作为参数,然后检查是否可以在每个路径中成功创建文件。然后应将结果放入 json 格式。

要运行的命令应该是:

./checkavailable.sh /the/first/path /the/second/path

(其中可以给出任意数量的输入路径,但至少有一个)并且我希望输出采用以下格式:

[
  { "is_available": 0, "path": "/the/first/path/" },
  { "is_available": 1, "path": "/the/second/path/" }
]

目前,我已使用以下脚本成功实现此目的:

#!/bin/bash

# Check if first path is available
if touch $1/checkalivefile ; then
    avail_path1=1
    rm $1/checkalivefile
else
    avail_path1=0
fi

# Check if second path is available
if touch $2/checkalivefile ; then
    avail_path2=1
    $2/checkalivefile
else
    avail_path2=0
fi

echo "["
printf "  { \"is_available\": "$avail_path1", \"path\": \"$1\" } "
printf ",\n"
printf "  { \"is_available\": "$avail_path2", \"path\": \"$2\" } "
echo
echo "]"

但它显然有点原始,并且硬编码为仅适用于 x2 参数,并且不能扩展到其他参数。

我现在可以尝试添加一个循环。但是,我遇到了这个脚本,它似乎做了类似的事情(在这种情况下获取磁盘使用情况),但使用 awk 而不是循环:

#!/bin/bash

echo "["
du -s -B1 "$@" | awk '{if (NR!=1) {printf ",\n"};printf "  { \"dir_size_bytes\": "$1", \"path\": \""$2"\" }";}'
echo
echo "]"

有人能演示一下如何使用“awk”来处理我的情况吗?我对 bash 脚本很陌生,所以希望能学到一些东西。

bash
  • 6 个回答
  • 402 Views
Martin Hope
teeeeee
Asked: 2023-09-16 00:23:43 +0800 CST

测试目录中是否存在所有三种文件类型

  • 5

.png我想检测目录、.txt和中是否存在以下每种文件类型之一.tar.gz。

测试其中两个时,以下工作正常

shopt -s nullglob
MYDIR=/some_dir
if [ $MYDIR/*.png] && [ $MYDIR/*.txt]; then
  echo "All files present"
else
  echo "At least one type is missing"
fi

但是如果我尝试使用来测试所有三个

if [ $MYDIR/*.png] && [ $MYDIR/*.txt] && [ $MYDIR/*.tar.gz]; then
...

或使用

if [[ $MYDIR/*.png && $MYDIR/*.txt && $MYDIR/*.tar.gz ]]; then
...

那么我没有得到正确的行为(即使其中一个文件丢失,它仍然返回 true)。

这里发生了什么?

bash
  • 2 个回答
  • 66 Views
Martin Hope
teeeeee
Asked: 2023-09-15 19:42:59 +0800 CST

使用 bash 使用根据当前日期命名的新文件覆盖旧文件

  • 5

我是 Linux 的初学者,需要帮助制作 bash 脚本来创建文件名中包含特定日期的文件。

我有一个名为 的目录/backups/,我想在其中根据当前日期和时间创建一个带有一些前缀文本的文件,例如/backups/backup_2023_09_15_14_00_00.txt. 这部分已经在这里得到回答)。

问题是,如果以前的备份文件已经存在(将根据格式命名backup_****_**_**_**_**_**.txt),并且新文件创建成功,我想删除以前的备份文件。

有没有办法做这样的事情?

bash
  • 3 个回答
  • 44 Views
Martin Hope
teeeeee
Asked: 2023-02-02 03:04:11 +0800 CST

用户是否需要可执行权限才能运行 du(磁盘使用情况)?[复制]

  • 5
这个问题在这里已经有了答案:
执行与读取位。Linux 中的目录权限是如何工作的? (9 个回答)
昨天关门了。

我正在观察以下行为,并想知道它是否符合预期。

我正在尝试在.拥有的目录上运行磁盘使用情况 ( du) 。user2test_directoryuser1

如果我更改权限以允许所有人完全访问(使用chmod 777 test_directory),那么user1和user2都能够按预期正确查看磁盘使用情况:

在此处输入图像描述

但是,如果我限制其他用户的可执行访问权限(使用chmod 776 test_directory),则user2无法运行du并发生权限错误:

在此处输入图像描述

此外,在出现错误的情况下,目录显示为 4096 字节大小。

  1. 为什么用户需要可执行权限才能使用 du 请求磁盘使用?我会天真地期望只需要读取权限(即chmod 774)。实际上,运行 du (即)似乎需要读取和执行权限chmod 775。

  2. 为什么在这种情况下目录大小默认为 ot 4096 字节?

谢谢!

permissions
  • 1 个回答
  • 22 Views

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve