Questions tagged «arguments»

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

4
在shell脚本中使用shift的目的是什么?
我遇到了这个脚本: #! /bin/bash if (( $# < 3 )); then echo "$0 old_string new_string file [file...]" exit 0 else ostr="$1"; shift nstr="$1"; shift fi echo "Replacing \"$ostr\" with \"$nstr\"" for file in $@; do if [ -f $file ]; then echo "Working with: $file" eval "sed 's/"$ostr"/"$nstr"/g' $file" > $file.tmp …

7
将上一个命令的输出作为参数传递给next
我有一个将数据输出到stdout(command1 -p=aaa -v=bbb -i=4)的命令。输出行可以具有以下值: rate (10%) - name: value - 10Kbps 我想grep该输出以存储该“比率”(我想这里的管道会很有用)。最后,我希望该比率成为第二个命令的参数值(假设command2 -t=${rate}) 在我这边看起来很棘手;我想更好地了解如何使用管道,grep,sed等。 我已经尝试了很多类似的组合,但是我对这些组合感到困惑: $ command1 -p=aaa -v=bbb -i=4 | grep "rate" 2>&1 command2 -t="rate was "${rate}

8
将命名参数传递给Shell脚本
有没有简单的方法可以将命名参数传递(接收)到Shell脚本? 例如, my_script -p_out '/some/path' -arg_1 '5' 并在内部my_script.sh将其接收为: # I believe this notation does not work, but is there anything close to it? p_out=$ARGUMENTS['p_out'] arg1=$ARGUMENTS['arg_1'] printf "The Argument p_out is %s" "$p_out" printf "The Argument arg_1 is %s" "$arg1" 在Bash或Zsh中可能吗?

10
argv为什么要包含程序名称?
典型的Unix / Linux程序接受命令行输入作为参数计数(int argc)和参数向量(char *argv[])。的第一个元素argv是程序名称-后面是实际参数。 为什么将程序名称作为参数传递给可执行文件?是否有使用自己的名称的程序示例(可能是某种exec情况)?

8
$ *和$ @有什么区别?
考虑以下代码: foo () { echo $* } bar () { echo $@ } foo 1 2 3 4 bar 1 2 3 4 它输出: 1 2 3 4 1 2 3 4 我正在使用Ksh88,但是我也对其他常见的shell感兴趣。如果您碰巧知道特定外壳的任何特殊性,请提及它们。 我在Solaris的Ksh手册页中发现了以下问题: $ *和$ @的含义在不加引号或用作参数分配值或文件名时相同。但是,当用作命令参数时,$ *等效于``$ 1d $ 2d ...'',其中d是IFS变量的第一个字符,而$ @等效于$ 1 $ 2 .... 我尝试修改IFS变量,但没有修改输出。也许我做错了什么?
72 shell  quoting  ksh  arguments 

3
curl如何防止密码出现在ps输出中?
我前段时间注意到,curl作为命令行参数提供的用户名和密码不会出现在ps输出中(尽管它们可能会出现在您的bash历史记录中)。 他们同样不会出现在中/proc/PID/cmdline。 (不过,可以导出用户名/密码组合参数的长度。) 演示如下: [root@localhost ~]# nc -l 80 & [1] 3342 [root@localhost ~]# curl -u iamsam:samiam localhost & [2] 3343 [root@localhost ~]# GET / HTTP/1.1 Authorization: Basic aWFtc2FtOnNhbWlhbQ== User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 Host: localhost Accept: */* [1]+ Stopped nc -l 80 [root@localhost ~]# jobs [1]+ …

8
解决“ MV:参数列表过长”?
我的文件夹中有超过一百万个文件需要排序,但是我却无能为力,因为一直mv输出此消息 -bash: /bin/mv: Argument list too long 我正在使用此命令移动无扩展名的文件: mv -- !(*.jpg|*.png|*.bmp) targetdir/
64 bash  shell  arguments  mv 

9
如何从ls命令仅回显一列输出?
可以说当我执行ls命令时,输出为: file1 file2 file3 file4 是否只能显示输出的特定列,在这种情况下为file2?我尝试了以下操作,但均未成功: echo ls | $2 基本上我只想回显第二列,在这种情况下,我想回显: file2
54 bash  ls  parameter  arguments 

1
何时以及如何在Unix / Linux中引入双破折号(-)作为选项定界符的结尾?
我不认为历史 Unix中的shell /实用程序或4.4BSD之类的 “最新”东西都不支持使用双破折号(或两个连续的连字符)作为选项定界符的结尾。使用FreeBSD,您可以看到例如在2.2.1发行版(1997)的rm 手册页中引入的注释。但这只是一个命令的文档。 查看我能找到的最旧的GNU fileutils 更改日志,我看到此1(稍作更改): Tue Aug 28 18:05:24 1990 David J. MacKenzie (djm at albert.ai.mit.edu) * touch.c (main): Don't interpret first non-option arg as a <--- time if `--' is given (POSIX-required kludge). * touch.c: Add long-named options. * Many files: Include <getopt.h> instead of "getopt.h" …
49 history  posix  gnu  arguments 

5
参数列表对于ls而言太长
尝试访问ls *.txt | wc -l包含许多文件的目录时出现以下错误: -bash: /bin/ls: Argument list too long 此“参数列表”的阈值是否取决于发行版或计算机规格?通常,我wc -l会将如此大结果的结果传递给其他一些命令(例如),因此我不关心终端的限制。
48 ls  arguments 

3
什么定义了命令单个参数的最大大小?
我的印象是,这里单个参数的最大长度不是问题,而是整个参数数组的总大小加上环境的大小(最大为)ARG_MAX。因此,我认为类似以下内容的方法将会成功: env_size=$(cat /proc/$$/environ | wc -c) (( arg_size = $(getconf ARG_MAX) - $env_size - 100 )) /bin/echo $(tr -dc [:alnum:] </dev/urandom | head -c $arg_size) >/dev/null 这样- 100就足以解决shell中环境大小与echo进程之间的差异。相反,我得到了错误: bash: /bin/echo: Argument list too long 玩了一段时间后,我发现最大值比整数小了一个十六进制数量级: /bin/echo \ $(tr -dc [:alnum:] </dev/urandom | head -c $(($(getconf ARG_MAX)/16-1))) \ >/dev/null 减一时,错误返回。似乎单个参数的最大值实际上是,ARG_MAX/16并且将-1空字节放在参数数组中字符串的末尾。 另一个问题是,当重复参数时,参数数组的总大小可能更接近ARG_MAX,但仍然不够大: …
47 kernel  echo  arguments 

7
`-`仅用于cd吗?
cd - 可以在当前目录和上一个目录之间切换。 似乎以前我曾经-将其用作其他命令的参数,尽管我不记得它的-含义是否与with相同cd。 我发现-不适用于ls。 难道- 只有在用CD?

7
Shebang中的多个论点
我想知道是否存在通过shebang行(#!)将多个选项传递给可执行文件的一般方法。 我使用NixOS,在我编写的任何脚本中,shebang的第一部分通常是/usr/bin/env。然后我遇到的问题是,系统将所有后续内容解释为单个文件或目录。 例如,假设我想编写一个bash在posix模式下执行的脚本。编写shebang的幼稚方式是: #!/usr/bin/env bash --posix 但是尝试执行生成的脚本会产生以下错误: /usr/bin/env: ‘bash --posix’: No such file or directory 我知道这篇文章,但我想知道是否有更通用,更清洁的解决方案。 编辑:我知道对于Guile脚本,有一种方法可以实现我想要的内容,在手册的4.3.4节中进行了介绍: #!/usr/bin/env sh exec guile -l fact -e '(@ (fac) main)' -s "$0" "$@" !# 这里的窍门是,第二行(以开头exec)被Guile解释器解释为代码,sh但在#!... !#块中但作为注释,因此被忽略。 不可能将这种方法推广到任何解释器吗? 第二次编辑:经过一番摸索之后,对于可以从中读取输入内容的解释器来说stdin,以下方法可行: #!/usr/bin/env sh sed '1,2d' "$0" | bash --verbose --posix /dev/stdin; exit; 但是,这可能不是最佳的,因为该sh过程一直持续到口译员完成工作为止。任何反馈或建议,将不胜感激。

3
我可以将pgrep与kill链接吗?
我注意到这|是用来将第一个命令的结果发送给另一个命令的。我想杀死所有与名称匹配的进程。 pgrep通常这样做: $ pgrep name 5089 5105 而且似乎有多个参数可以使用kill: sudo kill 5089 5105 但这是错误的: pgrep name | kill 那么如何正确地做呢?
31 shell  pipe  arguments 

2
在UEFI / EFI引导中,何时需要将add_efi_memmap指定为内核参数?
我正在阅读一些教程,了解如何EFI存根(efistub)加载Linux内核。这些指令通常使用内核引导参数add_efi_memmap。预期的硬件是具有8GB RAM的Intel x64。我当前的设置正在运行grub-efi引导程序和内核v3.13。 GRUB引导,而不在add_efi_memmap引导参数: 23BIOS-e820行数dmesg | grep BIOS-e820: | wc -l 243EFI内存行的计数dmesg | grep efi:\ mem | wc -l DMA区域:24保留页 内存:7840568K / 8283384K可用 442816K保留 GRUB引导与 add_efi_memmap EFI内存映射的大小似乎有所不同: 23 BIOS-e820行 57 EFI内存线 DMA区域:22保留页 内存:7885076K / 8283384K 398308K保留 EFI存根启动不包含 add_efi_memmap: 22 BIOS-e820行 60 EFI内存线 DMA区域:21保留页 内存:可用7885012K / 8283384K EFI存根启动用 add_efi_memmap: 22 BIOS-e820行 …

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.