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
    • 最新
    • 标签
主页 / unix / 问题

问题[parameter](unix)

Martin Hope
NewLinux
Asked: 2022-01-07 02:55:53 +0800 CST

将参数传递给正在运行的脚本的最佳方法是什么?

  • 0

有一个脚本(在破折号上)在系统启动时运行(作为守护程序)。该脚本在根目录下运行。

在用户下,我创建了一个具有正确参数的文件,脚本每秒检查一次文件是否存在并读取参数。

也就是说,我通过文件将参数传递给脚本(以root身份运行)。你能给我一个更好的方法吗?

需要什么:通过用户命令(操作)以root权限执行脚本。在不提升用户权限的情况下。从文件夹(if-pre-up.d/...)运行脚本时,也许有一个选项可以提升网络接口。我正在查看 udev 并插入闪存卡,但这并不方便。

@Marcus Müller 例如,有一个文件应该在短时间内对用户可读(root:user 440)。之后权限应该变回(root:user 400)

@Marcus Müller OS Gnu/Linux (Debian)。'这听起来就像你本质上是在用户和根守护进程之间传递消息。' - 是的

@Frédéric Loyer 我喜欢管道的解决方案。@Marcus Müller 看到的错误管道行为确实发生了,但我需要每 5-30 分钟传递一个参数,所以应该不会混淆(b 之前的 a)。即我在 root 下运行的脚本将如下所示:

#!/usr/bin/dash
mkfifo fifo
while read line <fifo; do
        if [ $line -eq 'arg1' ] ; then
                echo 'Starting...'
        fi
done

正确的?在安全方面,使用这种管道是否会恶化任何事情?

parameter daemon
  • 1 个回答
  • 113 Views
Martin Hope
Saket Mankar
Asked: 2020-01-25 04:11:24 +0800 CST

处理带有*的参数传递给unix [重复]

  • 0
这个问题在这里已经有了答案:
为什么我的 shell 脚本会因空格或其他特殊字符而窒息? (6 个回答)
2年前关闭。

例如,我通过 unix 中的配置文件接收查询。配置文件内容将采用以下格式:

Table_name|query

ABC|select ABC.A,ABC.B from PQR left join (select * from ABC) on ABC.pk=PQR.pk

我正在尝试如下处理查询部分:

    while read line in config_file
    do
        query=`echo $line|awk -F "|" '{print $1}'`
        result=hive -e "$query"
        ...

但是,查询变量中的“*”正在扩展到当前目录中的文件列表

能否请您帮助如何逃脱*角色,我搜索了解决方案但找不到。

escape-characters parameter
  • 1 个回答
  • 30 Views
Martin Hope
Malvineous
Asked: 2020-01-16 03:19:34 +0800 CST

tftpd-hpa --verbosity 选项如何工作?

  • 2

我正在尝试使用 tftp-hpa 设置 TFTP 服务器,根据手册页,我可以使用该--verbosity选项来获得更多输出。

不幸的是,我找不到任何解释我应该传递给这个选项的东西。我该如何使用它?

  • --verbosity loud
  • --verbosity 5
  • --verbosity 255
  • --verbosity DEBUG

这在任何地方都有记录吗?到目前为止,我没有尝试过在标准输出上产生任何消息。

documentation parameter
  • 2 个回答
  • 5209 Views
Martin Hope
Matteo Tassinari
Asked: 2019-03-16 00:38:59 +0800 CST

将关联数组作为参数列表传递给脚本

  • 10

在脚本中,我有一个关联数组,例如:

declare -A VARS=( ["key1"]="value1" ["key2"]="value" )

是否有一个命令可以将其转换为表单中的参数列表

--key1=value1 --key2=value2

无需手动重写

 --key1="${VARS[key1]}" --key2="${VARS[key2]}"

我想到的用例是将数组作为参数列表传递给脚本,例如

my_script.sh $(to_param_list $VARS)

为了扩展我对@Kusalananda 回答的评论,我的确切用例如下:我有一个脚本,用于使用 makeself 构建自解压安装程序,并且该脚本接收一些参数,这些参数将在:

  • 脚本本身的参数
  • 自解压安装程序中的安装程序参数

然后脚本会像这样构建安装程序:

to_param_list installer_param_list installer_param_array
./makeself ./path/to/sourcedir ./path/to/created/installer "My installer" ./path/to/install/inside/package "${installer_param_list[@]}"

但是,我已经使用包内的一个非常简单的安装程序脚本测试了参数传递:

while ! -z "$1" ; do
    echo "$1"
    shift
done

并传递一个数组,如:

installer_param_array=( ["upgrade-from"]="19 .2.0" ["upgrade-to"]="19.3.0" )

导致此输出:

--upgrade-to=19.3.0
--upgrade-from=19
.2.0
bash parameter
  • 1 个回答
  • 3700 Views
Martin Hope
Bret Joseph
Asked: 2018-12-11 02:56:49 +0800 CST

我如何回显 bash 中除了最后一个参数之外的所有参数?

  • 2

我有以下

#!/bin/bash
function f1 ()
{
  echo "${@:1:-2}"
}
f1 1 2 3 4 5 6

我需要回显1 2 3 4 5 man bash告诉我,当我使用时,@我不能使用负长度。

我求助于使用计算("${@:1:$((${#@}-1))}"),这对我来说似乎是不正统的。

如何从输出中排除最后一个参数?

bash parameter
  • 1 个回答
  • 465 Views
Martin Hope
mf94
Asked: 2018-09-15 01:12:45 +0800 CST

处理未使用的 getopts 参数(选项不是强制性的吗?)

  • 1

我有一个以 getopts 开头的脚本,如下所示:

USAGE() { echo -e "Usage: bash $0 [-w <in-dir>] [-o <out-dir>] [-c <template1>] [-t <template2>] \n" 1>&2; exit 1; }

if (($# == 0))
then
    USAGE
fi

while getopts ":w:o:c:t:h" opt
do
    case $opt in
        w ) BIGWIGS=$OPTARG
        ;;
        o ) OUTDIR=$OPTARG
        ;;
        c ) CONTAINER=$OPTARG
        ;;
        t ) TRACK=$OPTARG
        ;;
        h ) USAGE
        ;;
        \? ) echo "Invalid option: -$OPTARG exiting" >&2
       exit
        ;;
        : ) echo "Option -$OPTARG requires an argument" >&2
        exit
        ;;
    esac
done

more commands etc

echo $OUTDIR
echo $CONTAINER

我正在对此脚本进行一些测试,并且在某个阶段,我不需要/不想使用 -c 参数 [-c ]。换句话说,我试图测试脚本的另一个特定部分,根本不涉及 $CONTAINER 变量。因此,我只是在 $CONTAINER 的所有命令前面添加了 # 并进行了一些测试,这很好。

在不使用 $CONTAINER 的情况下测试脚本时,我输入:

bash script.bash -w mydir -o myoutdir -t mywantedtemplate

但是,我想知道,鉴于我的 getopts 命令,我没有收到警告。换句话说,为什么我没有收到要求 -c 参数的警告。这可能吗?仅当我键入以下内容时才会出现警告:

bash script.bash -w mydir -o myoutdir -t mywantedtemplate -c

更新

做了一些测试后,我认为是这样的:

  • 如果你没有明确地写“-c”,getopts 不会“询问”你并给你一个错误(除非你的脚本正在用它做一些事情 - 即如果你没有把 # 放在每个命令的前面使用这个论点)
  • 如果你输入“-c”,你只会得到一个错误,而不是别的

这个对吗?大概我所做的是“糟糕的做法”,应该避免:在测试时,我应该完全从 getopts 命令中删除 c: 。

我想我要问的是:当你告诉 getopts 参数时(我脚本中的“while”行),我们是在说:这些是你可以期待的选项,后面跟着“:”的选项应该与他们。但他们不必被给予。即,您可以期待带有参数的 c 选项,但如果您根本没有获得 c 选项,则不要抛出错误。

bash parameter
  • 2 个回答
  • 7280 Views
Martin Hope
A. B
Asked: 2018-04-16 10:39:07 +0800 CST

如何将变量值传递给脚本并在一行中运行它?

  • 0

我有一个文件(temp_4n.in),其中包含以下几行:

 5  C   172.0696  
 5  C   135.6942  
 5  H   30.9062  
 5  H   31.8124  
 12 H   31.0377  
 12 O   293.0612  
 12 H   32.4678  

我有一个脚本(testsc.txt),它将提取以某个数字开头的行的最后一个 H,我会定期更改:

 grep $'^${mold}\tH' temp_4n.in | tail -1 > temp_5n.in

但是,当我使用以下命令运行脚本(例如,想要以 12 开头的行)时,它会失败:

 qsub -v mold=12 ./testsc.txt

我认为这与 grep 命令中的第一个 '$' 被视为参数并被错误地替换有关。谁能帮我找出问题所在?

parameter
  • 1 个回答
  • 656 Views
Martin Hope
David Brown
Asked: 2018-03-22 10:22:18 +0800 CST

为什么子字符串扩展 [ test="-efoo"; echo ${test:0:2} ] 失败?

  • 1

在 Linux Mint 上,使用 bash..

test="-ffoo"; echo ${test:0:2}

输出前两个字符的作品

但

test="-efoo"; echo ${test:0:2}

失败,显然为空输出。

我在想这个的形式是

${parameter:offset:length}

我知道参数字符不能*@#?-$!0_

但是$test参数是 - 它的内容肯定可以是任何东西吗?我猜-e是触发了类似贝壳的东西,但为什么..

bash parameter
  • 1 个回答
  • 48 Views
Martin Hope
Spike
Asked: 2018-02-26 23:38:00 +0800 CST

如何在for循环中使用参数值

  • 0

我正在运行我的脚本script.sh 12345 12346 12347

for z in 1..$(seq 1 $#);
do
    echo "param $z is $($(echo $z))"; //Line 4
done;

我期待输出如下:

param 1 is 12345
param 2 is 12346
param 3 is 12347

猜猜,我在第 4 行中遗漏了一些东西。

shell-script parameter
  • 2 个回答
  • 206 Views
Martin Hope
user267935
Asked: 2017-12-29 12:52:21 +0800 CST

如何输出“$@”的单个元素?

  • 5

我读过这$@是一个保存位置参数的数组。

我试图输出$@数组的一个元素:

echo ${@[1]}

但是bash给了我这个错误:

test.sh: line 1: ${@[1]}: bad substitution
bash parameter
  • 2 个回答
  • 459 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