标签: arguments

如何从 $@ 中删除位置参数

基本上,我想-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
Run Code Online (Sandbox Code Playgroud)

有没有好的方法可以做到这一点?

顺便说一句,尽管我主要对适用于 的答案感兴趣,但我/bin/sh也对仅适用于/bin/bash.

shell shell-script arguments

19
推荐指数
1
解决办法
1万
查看次数

如何有条件地从 POSIX shell 脚本传递参数?

#!/bin/sh
echo "Noise $1"
echo "Enhancement $2"
for snr in 0 5 10 15 20 25
do
  python evaluate.py --noise $1 --snr 25 --iterations 1250 --enhancement $2
done
Run Code Online (Sandbox Code Playgroud)

如果$2未指定,我不想将--enhancement $2参数传递给我的 python 脚本。我该怎么做?

shell-script posix arguments

19
推荐指数
2
解决办法
2361
查看次数

如何将一个程序的标准输入作为 arg 传递给另一个程序?

假设存在一个程序,它接受两个参数;输入文件和输出文件。

如果我不想将此输出文件保存到磁盘,而是直接将其传递给stdin另一个程序,该怎么办。有没有办法实现这一目标?

我在 Linux 上遇到的很多命令都提供了一个选项来传递“-”作为输出文件参数,它执行我上面指定的操作。这是因为stdin不可能将程序的作为参数传递吗?如果是,我们该怎么做?

我如何使用它进行成像的一个例子是:

pdftotext "C BY BRIAN W KERNIGHAN & DENNIS M RITCHIE.pdf" stdin(echo)
Run Code Online (Sandbox Code Playgroud)

我使用的外壳是 bash。

bash io-redirection arguments

18
推荐指数
3
解决办法
4829
查看次数

如何将数据流式传输到希望从作为参数给出的文件中读取数据的程序?

我有一个巨大的 gzipped 文件,我想要一个程序(在这种情况下为 4s-import)来读取它。首先解压缩文件,然后以文件路径作为参数调用程序需要花费大量时间。是否有可能做这样的事情:

zcat huge.gz | 4s-import <SOME MAGIC>
Run Code Online (Sandbox Code Playgroud)

SOME-MAGIC 就像包含标准输入的抽象文件的路径?

否则我必须做的更慢、更消耗磁盘空间的替代方案是:

zcat huge.gz > huger
4s-import huger
Run Code Online (Sandbox Code Playgroud)

shell bash io-redirection arguments

17
推荐指数
2
解决办法
1867
查看次数

用于构建参数列表的 Bash 字符串连接

鉴于这一段 bash:

PARMS='-rvu'
PARMS+=" --delete --exclude='.git'"
echo $PARMS
rsync ${PARMS} . ${TARGET}
Run Code Online (Sandbox Code Playgroud)

回显按预期显示 PARMS 字符串,未显示任何错误,但 rsync 静默地运行,就好像由 += 添加的选项不存在一样。但是,这按预期工作:

PARMS='-rvu'
rsync ${PARMS} --delete --exclude='.git' . ${TARGET}
Run Code Online (Sandbox Code Playgroud)

我想我用 bash 引号搞砸了一些东西(这些引号总是有问题),但不确定是什么以及为什么忽略选项,即使字符串似乎已正确构建。

shell bash quoting arguments

17
推荐指数
1
解决办法
9144
查看次数

将命令行参数传递给 shell 脚本内的程序

至于./script.sh arg1 [arg2 arg3 ...], 命令行参数arg1, arg2, ... 可以通过$1, $2, ... 获取,但参数数量固定。

在 shell 脚本中,我想将参数从开始传递arg2给程序,

#/bin/bash
...
/path/to/a/program [I want to pass arg2 arg3 ... to the program]
...
Run Code Online (Sandbox Code Playgroud)

因为可能有一个或多个参数,我该怎么做?

shell bash shell-script arguments

17
推荐指数
2
解决办法
3万
查看次数

为什么称为 /bin/sh -c echo foo 的 echo 不输出任何内容?

例如,虽然这有效:

$回声富
富

这不会:

$ /bin/sh -c echo foo

而这样做:

$ /bin/sh -c 'echo foo; 回声栏'
富
酒吧

有解释吗?

command-line shell echo arguments

16
推荐指数
3
解决办法
8625
查看次数

如何使用不同的参数重复执行命令?

我在 Ubuntu 上。我复制了一些参数(由换行符分隔),我可以使用xsel将它们打印出来

$ xsel
arg1
arg2
arg3
arg4
...
Run Code Online (Sandbox Code Playgroud)

现在,我想将这些参数中的每一个用于另一个命令,并根据参数的数量执行该命令。

所以我试过了

$ xsel | mycommand "constantArgument" $1
Run Code Online (Sandbox Code Playgroud)

但是,这mycommand仅对第一个参数执行。我如何为每个参数执行它?

command-line shell xargs arguments

15
推荐指数
2
解决办法
3425
查看次数

'find -exec' 如何用空格传递文件名?

如果我有一个目录,其中包含一些名称有空格的文件,例如

$ ls -1 dir1
file 1
file 2
file 3
Run Code Online (Sandbox Code Playgroud)

我可以成功地将它们全部复制到另一个目录,如下所示:

$ find dir1 -mindepth 1 -exec cp -t dir2 {} +
Run Code Online (Sandbox Code Playgroud)

但是,输出find dir1 -mindepth 1包含未转义的空格:

$ find dir1 mindepth 1
dir1/file 1
dir1/file 3
dir1/file 3
Run Code Online (Sandbox Code Playgroud)

如果我使用print0而不是print,输出仍然包含未转义的空格:

$ find dir1 mindepth 1 -print0
dir1/file 1dir1/file 2dir1/file 3
Run Code Online (Sandbox Code Playgroud)

要使用 手动复制这些文件cp,我需要对空格进行转义;但是当cp的参数来自时,这似乎是不必要的find,无论我是否使用+\;在命令末尾。

这是什么原因?

shell bash find quoting arguments

15
推荐指数
2
解决办法
1万
查看次数

在没有源代码的情况下隐藏程序的参数

我需要隐藏我正在运行的程序的一些敏感参数,但我无权访问源代码。我也在共享服务器上运行它,所以我不能使用类似的东西,hidepid因为我没有 sudo 权限。

以下是我尝试过的一些事情:

  • export SECRET=[my arguments],然后调用./program $SECRET,但这似乎没有帮助。

  • ./program `cat secret.txt`哪里secret.txt有我的论据,但全能ps者能嗅出我的秘密。

有没有其他方法可以隐藏我的论点而不涉及管理员干预?

linux process ps arguments

15
推荐指数
4
解决办法
4877
查看次数