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 / 问题

问题[arguments](unix)

Martin Hope
Data Engineer
Asked: 2023-11-03 08:15:14 +0800 CST

将文本文件中单行的多个参数传递到终端

  • 5

我有一个 python 程序,需要 2 个参数输入文件和输出文件。它读取输入文件并创建该文件的副本,并在输出文件中进行一些修改。

我创建了一个带有一组参数的文本文件。它在多行上有多组参数。但是对于程序的1次执行,它需要逐行读取。因此每行都有 2 个参数(用空格分隔)要传递:输入文件和输出文件。

带有参数的文件示例(将其称为File-With-Multiple-Arguments-Per-Line.txt):

input-file-1-path/input-file-1-name.sql output-file-1-path/output-file-1-name.sql 
input-file-2-path/input-file-2-name.sql output-file-2-path/output-file-2-name.sql
input-file-3-path/input-file-3-name.sql output-file-3-path/output-file-3-name.sql
input-file-4-path/input-file-4-name.sql output-file-4-path/output-file-4-name.sql

我试过这个:

for arg in $(< /Users/Repository/File-With-Multiple-Arguments-Per-Line.txt); 
    do python /Users/Git-Repos/MyProgram.py "$arg" "$arg" ;
done. 

用法是这样的:python MyProgram.py input-file.txt output-file.txt

我做需要做的事。尽管由于某种原因它处理每个参数 3 次(因此,第一个参数是输入文件也被视为输出文件;与第二个参数相同)。所以我最终修改了输入文件,这是我不应该的。我知道这一点,因为输入和输出文件都是 2 个独立的 git 存储库。

我也只使用了一个"$arg",但后来我发现我的程序没有收到所需的第二个参数(输出文件)。我看到的不是我的输出文件,output: <stdout> 但是使用"$arg" "$arg"会导致我的程序的错误解释。就好像同一个任务做了 3 次——第一次完成了预期的任务;第二次使用输入文件作为输出和输入;第三次使用输出文件作为输出和输入。

我也尝试了下面的解决方案,但是我的程序没有执行任何操作。尽管它在我的终端中显示输出,就好像它做了应该做的事情一样。并且没有出现错误。

仅供参考:从文件中读取 shell 脚本的多个参数

while read x y; do
    python /Users/Git-Repos/MyProgram.py "$x" "$y"
done < /Users/Repository/File-With-Multiple-Arguments-Per-Line.txt
arguments
  • 2 个回答
  • 54 Views
Martin Hope
sanjayz
Asked: 2022-07-13 09:55:29 +0800 CST

识别是否存在并从 shell args 中删除特定参数

  • 1

我必须检查特定参数是否可以说“java8”存在于我的脚本的 shell 参数中,如果存在则删除它。我还希望它存储在其他变量中,但希望将其从我的 $*.

一个选项我尝试使用 getopts 检查 arg 是否存在,但我不知道如何删除参数。

请注意 - 用于检查 'java8' 的 arg 位置未知 我可以在任何地方

while getopts "f:" flag
do
     case $flag in
         f)
           echo $OPTARG
           ;;
     esac
done
echo $*
~

所以基本上当我调用 -

./test.sh arg1 arg2 -f java8 arg3

执行 getopts 块后,剩余的 args 将是

参数 1、参数 2、参数 3

arguments getopts
  • 2 个回答
  • 38 Views
Martin Hope
Tac Tacelosky
Asked: 2022-06-09 11:06:08 +0800 CST

在单引号内扩展参数

  • 0

我正在尝试创建一个执行以下操作的函数

composer config repositories.foo '{"type": "path", "url": "/b/foo-bundle"}'

我从

lb() { composer config repositories.$1 '{"type": "path", "url": "/b/$1-bundle" }' ; }
lb foo

但是因为参数(一个 json 字符串)在单引号内,所以它会生成 $1-bundle 而不是 foo-bundle。

我确信有办法摆脱这种情况,但我似乎无法破解它。

谢谢。

bash arguments
  • 2 个回答
  • 35 Views
Martin Hope
user598527
Asked: 2022-05-23 03:08:29 +0800 CST

无法在脚本中打印位置参数

  • 0

我正在使用这种方法打开一个 Gnome 终端窗口并运行命令——在这种情况下,向我发送简单的通知消息(将通过 安排at):

#!/bin/sh
gnome-terminal -- /bin/sh -c 'echo "remember: $1"; exec bash'

shell 只打印remember:字符串而不是我指定的值,例如在运行时remind.sh "pick up the package"或remind.sh "buy groceries X and Y".

当我将脚本剥离到其核心时,一切都按预期工作(当然,通过 cron 或 systemd 在自动化中没有任何用处,因为前台没有显示任何内容):

#!/bin/sh
echo "remember: $1"
bash arguments
  • 1 个回答
  • 69 Views
Martin Hope
Manuel Dominguez Becerra
Asked: 2022-01-07 01:53:40 +0800 CST

帮助理解 Bash 命令行参数解析代码

  • 1

我想为我正在开发的脚本使用两个参数和第三个可选参数。我是使用 bash 的新手,所以我一直在复制并尝试理解以下代码,它可以满足我的需求(我猜)

while [[ $# -gt 0 ]]; do
   case $1 in
   -f1|-fasta1)
       FASTA1=$2
       shift
       ;;
   -f1=*|-fasta1=*)
       FASTA1=${1#*=}
       ;;
   -d|-directory)
       DIRECTORY=$2
       shift
       ;;
   -d=*|-directory=*)
       DIRECTORY=${1#*=}
       ;;
   -f2|fasta2)
       FASTA2=$2
       shift
       ;;
   -f2=*|-fasta2=*)
       FASTA2=${1#*=}
       ;;
   -*)
       echo "Invalid option: $1" >&2
       exit 1
       ;;
   --)
       # Do FILES+=("${@:2}") maybe
       break
       ;;
   *)
       # TODO
       # Do FILES+=("$1") maybe
       ;;
   esac

   shift
done

问题是这段代码有很多部分我真的不明白什么是例如 the -gt 或 the1#*=或为什么每个参数需要写两次第一行

-f1|-fasta1)
       FASTA1=$2
       shift

和两个

 -f1=*|-fasta1=*)
       FASTA1=${1#*=}

有人可以告诉我在哪里可以找到对此的解释。我一直在阅读教程,但使用更简单的示例我无法理解这一点。

bash arguments
  • 1 个回答
  • 166 Views
Martin Hope
SRobertJames
Asked: 2021-11-26 15:39:49 +0800 CST

如何通过另一个 shell 运行所有命令行参数?

  • 0

我有一个脚本tempenv,我想使用如下:

$ tempenv ls -l

tempenv看起来像这样:

#!/bin/bash
setarch ... /bin/bash -c $@

但是,它并没有按我的意愿工作。相反,它只运行第一个参数,而忽略其他任何内容。那就是tempenv ls -l运行,好像tempenv ls。

shell-script arguments
  • 3 个回答
  • 1079 Views
Martin Hope
Baran Aldemir
Asked: 2021-11-15 10:33:42 +0800 CST

如何有效地检查给 bash 脚本的参数?

  • 0

我写了一个 bash 脚本,但由于我是一个自学的 bash 菜鸟,我想问我是否可以更有效地检查给定的参数。我也用谷歌搜索过这个并检查了这里的主题,但到目前为止我看到的例子太复杂了。在 python3 中,有很多更简单的方法,但我想在 bash 中它有点复杂。

#!/bin/bash

ERR_MSG="You did not give the argument required"

if [[ ${1?$ERR_MSG} == "a" ]]; then
        echo "ABC"
elif [[ ${1?$ERR_MSG} == "b" ]]; then
        echo "123"
elif [[ ${1?$ERR_MSG} == "c" ]]; then
        echo ".*?"
else
    echo "You did not provide the argument correctly"
    exit 1
fi
bash arguments
  • 2 个回答
  • 2350 Views
Martin Hope
Goahnary
Asked: 2020-02-27 13:00:28 +0800 CST

bash:意外标记“foo”附近的语法错误

  • 0

为简单起见,我有一个命令要别名:

php artisan route:list | (head -n 3; grep checkout)

此命令显示此表的标题并搜索路由。结果如下所示:

+--------+----------+--------------------------------------------+----------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+
| Domain | Method   | URI                                        | Name                                               | Action                                                                        | Middleware                                           |
+--------+----------+---------------------------------------------+----------------------------------------------------+-------------------------------------------------------------------------------+------------------------------------------------------+
|        | POST     | profile/auctions/checkout                  | user-portal-profile-auctions-checkout              | xxxxxxxxxxxxxxxx                   | web,auth                                             |
|        | POST     | profile/deals/checkout                     | user-portal-profile-deals-checkout                 | xxxxxxxxxxxxxx                     | web,auth                                             |
|        | POST     | profile/quotes/checkout                    | user-portal-profile-quotes-checkout                | xxxxxxxxxxxxxxx                    | web,auth                                             |

所以这就是我的~/.bash_profile:

alias findRoute='php artisan route:list | (head -n 3; grep $1)'

但我不断收到此错误:

bash: syntax error near unexpected token `checkout'

是什么赋予了?为什么它不接受我的论点?

我尝试在传递的参数中使用单引号和双引号。

我尝试在别名中使用单引号和双引号。没有什么变化。

bash arguments
  • 1 个回答
  • 222 Views
Martin Hope
Geoff
Asked: 2020-01-13 02:25:14 +0800 CST

嵌套的 shell 脚本不适用于列表变量

  • 0

我创建了以下两个最小的 shell 脚本......

测试1

#!/usr/bin/env bash

letterList=$1

for letter in $letterList
do
    echo $letter
done

还有一秒钟

测试2

#!/usr/bin/env bash

letterList=$1

test1 $letterList

当我执行时,test1 'A B C'我得到了所需的输出,A然后B是C.

但是当我执行时,test2 'A B C'我希望test1 'A B C'会发生,但实际输出仅为A.

所以看起来嵌套变量列表似乎没有被读取——换句话说,正在执行的是test1 A.

发生了什么事,我怎样才能达到预期的结果?

PS:如果相关的话,我正在使用 OS X。

shell-script arguments
  • 3 个回答
  • 163 Views
Martin Hope
datsb
Asked: 2019-12-26 05:42:27 +0800 CST

是否可以将不同的 $0 传递给子 bash 脚本?

  • 12

我知道这可能听起来“不像设计师的意图”,但我有现实生活中的情况,我正在修改的 bash 脚本需要调用另一个我不允许修改的 bash 脚本。

“不可修改的 bash 脚本”以:

source `dirname $0`/setenv.sh

(setenv.sh也以开头SCR2PATH=source "$( cd "$(dirname "$0")" ; pwd -P )"并且也是不可修改的)

有没有一个技巧可以用与$0调用脚本不同的方法来欺骗子脚本?

bash arguments
  • 3 个回答
  • 1773 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