基本上,我想-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.
#!/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 脚本。我该怎么做?
假设存在一个程序,它接受两个参数;输入文件和输出文件。
如果我不想将此输出文件保存到磁盘,而是直接将其传递给stdin另一个程序,该怎么办。有没有办法实现这一目标?
我在 Linux 上遇到的很多命令都提供了一个选项来传递“-”作为输出文件参数,它执行我上面指定的操作。这是因为stdin不可能将程序的作为参数传递吗?如果是,我们该怎么做?
我如何使用它进行成像的一个例子是:
pdftotext "C BY BRIAN W KERNIGHAN & DENNIS M RITCHIE.pdf" stdin(echo)
Run Code Online (Sandbox Code Playgroud)
我使用的外壳是 bash。
我有一个巨大的 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) 鉴于这一段 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 引号搞砸了一些东西(这些引号总是有问题),但不确定是什么以及为什么忽略选项,即使字符串似乎已正确构建。
至于./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)
因为可能有一个或多个参数,我该怎么做?
例如,虽然这有效:
$回声富 富
这不会:
$ /bin/sh -c echo foo
而这样做:
$ /bin/sh -c 'echo foo; 回声栏' 富 酒吧
有解释吗?
我在 Ubuntu 上。我复制了一些参数(由换行符分隔),我可以使用xsel将它们打印出来
$ xsel
arg1
arg2
arg3
arg4
...
Run Code Online (Sandbox Code Playgroud)
现在,我想将这些参数中的每一个用于另一个命令,并根据参数的数量执行该命令。
所以我试过了
$ xsel | mycommand "constantArgument" $1
Run Code Online (Sandbox Code Playgroud)
但是,这mycommand仅对第一个参数执行。我如何为每个参数执行它?
如果我有一个目录,其中包含一些名称有空格的文件,例如
$ 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,无论我是否使用+或\;在命令末尾。
这是什么原因?
我需要隐藏我正在运行的程序的一些敏感参数,但我无权访问源代码。我也在共享服务器上运行它,所以我不能使用类似的东西,hidepid因为我没有 sudo 权限。
以下是我尝试过的一些事情:
export SECRET=[my arguments],然后调用./program $SECRET,但这似乎没有帮助。
./program `cat secret.txt`哪里secret.txt有我的论据,但全能ps者能嗅出我的秘密。
有没有其他方法可以隐藏我的论点而不涉及管理员干预?