Questions tagged «parameter»



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

3
将数组转换为命令的参数?
我有一个命令的“选项”数组。 my_array=(option1 option2 option3) 我想使用数组中的值作为选项在bash脚本中调用此命令。因此,command $(some magic here with my_array) "$1"变为: command -option1 -option2 -option3 "$1" 我该怎么做?可能吗?
39 bash  parameter  array 


4
bash迭代文件列表,除非为空
我以为这很简单-但事实证明它比我预期的要复杂。 我想遍历目录中特定类型的所有文件,所以我这样写: #!/bin/bash for fname in *.zip ; do echo current file is ${fname} done 只要目录中至少有一个匹配文件,此方法就起作用。但是,如果没有匹配的文件,我会得到: current file is *.zip 然后,我尝试: #!/bin/bash FILES=`ls *.zip` for fname in "${FILES}" ; do echo current file is ${fname} done 虽然没有文件时循环主体不执行,但是我从ls收到错误: ls: *.zip: No such file or directory 如何编写一个干净地处理没有匹配文件的循环?
33 bash  parameter 

2
使用`set -eu`时正确的EXIT和ERR陷阱行为
与ERR和EXIT陷阱一起使用set -e(errexit),set -u(nounset)时,我观察到一些奇怪的行为。它们似乎相关,因此将它们放在一个问题中似乎是合理的。 1)set -u不触发ERR陷阱 码: #!/bin/bash trap 'echo "ERR (rc: $?)"' ERR set -u echo ${UNSET_VAR} 预期:ERR陷阱被调用,RC!= 0 实际:未调用ERR陷阱,RC == 1 注意:set -e不改变结果 2)set -eu在EXIT陷阱中使用退出代码是0而不是1 码: #!/bin/bash trap 'echo "EXIT (rc: $?)"' EXIT set -eu echo ${UNSET_VAR} 预期:调用EXIT陷阱,RC == 1 实际:调用EXIT陷阱,RC == 0 注意:使用时set +e,RC ==1。当任何其他命令引发错误时,EXIT陷阱将返回正确的RC。 编辑:关于该主题的一篇SO帖子带有一个有趣的注释,表明这可能与所使用的Bash版本有关。使用Bash 4.3.11测试此代码段会导致RC = …

2
命令行术语:命令的这些部分叫什么?
在命令行中,我经常使用“简单”命令,例如 mv foo/bar baz/bar 但我不知道该怎么称呼它的所有部分: ┌1┐ ┌──2───┐ git checkout master │ └──────3──────┘ └───────4─────────┘ 我(认为我)知道1是命令,2是参数,我可能将3称为参数列表(对吗?)。 但是,我不知道该怎么称呼4。 如何标记更复杂的“命令”? find transcripts/?.? -name '*.txt' | parallel -- sh -c 'echo $1 $2' {} {/} 我希望能得到一个答案,该答案细分了上面所谓的“ 1、2、3、4”以及该“命令”的各个部分的名称。 最好也了解一下我这里未包括的其他独特/令人惊讶的事物。


2
GRUB2和内核vga =参数
根据文档,vga=从GRUB2开始不赞成使用内核参数。某些新适配器似乎不再支持该内核,这一事实无关紧要,因为我拥有的显卡已经使用了七到八年。 现在的问题是,我想使用更高分辨率的文本模式,例如80x50,而不是默认的80x25字符。显然,所有的图形(VBE / VESA)模式,是这款显卡(ATI RAGE XL)的问题了-可用模式只显示列表中0通过6。6是80x60,但看起来可怕,所以我想一起去1(80x50的)。 每当不支持默认模式(默认注释已注释掉GRUB_TERMINAL=console)并提示我进行选择时,我都会在获得可用模式列表后看到80x50和80x60工作。 如果不应该在内核命令行上设置模式,并且每次使用GRUB_GFXMODE(带有或不带有预加载vbe模块)都GRUB_GFXPAYLOAD_LINUX=keep失败,那么如何设置模式?失败如:屏幕保持空白,因为这是我在本机中拥有的卡的无效图形模式? 我的想法是nomodeset仍然传递给内核,但是引导加载程序仍然必须设置图形模式。而且除了vga=内核参数之外,我看不到其他任何选项。 注意: GRUB2控制台上的vbetest和videotest命令将使屏幕空白,然后声称没有视频输入,然后屏幕切换到睡眠模式。vbeinfo并videoinfo显示了上述以外的一些可用模式,但没有提及应在何处设置。另外,在内核命令行中传递vga=1(不传递nomodeset)时,我看到一个很简短的警告,说明它已过时,但是它太长了,无法完全读取-输出不会出现在中dmesg。

1
执行功能参数提供的命令
我试图在bash脚本中创建一个函数方法,该函数方法执行由参数提供给该方法的命令。 意思是这样的: special_execute() { # Some code # Here's the point where the command gets executed $@ # More code } special_execute echo "abc" 我已经尝试过我$@,"$@",$*,"$*"我怎么能这样做呢?

2
如何传递参数以在bash脚本中起作用?
我想编写一个可以从带有许多不同变量的脚本中调用的函数。由于某些原因,我在执行此操作时遇到很多麻烦。我读过的示例始终仅使用全局变量,但就我所知,这不会使我的代码更具可读性。 预期的用法示例: #!/bin/bash #myscript.sh var1=$1 var2=$2 var3=$3 var4=$4 add(){ result=$para1 + $para2 } add $var1 $var2 add $var3 $var4 # end of the script ./myscript.sh 1 2 3 4 我尝试$1在函数中使用诸如此类,但随后只需要调用整个脚本的全局范围即可。基本上,我正在寻找类似的东西$1,$2诸如此类,但是在函数的本地上下文中。如您所知,函数可以使用任何适当的语言来工作。

4
echo $ -1显示什么?
什么是输出echo $-1,echo $-2,echo $-3..是什么意思? 在我的一个Linux机器上,它显示了我: echo $-1 imsBEl1 echo $-2 imsBEl2 在另一个Linux机器上,它显示: echo $-1 himBH1 echo $-2 himBH2 它们是映射到某些内存位置还是其他东西?
14 shell  echo  parameter 


2
如何安全地将变量传递给启用了root的脚本?
这个问题是完全笼统的,不仅适用于我的情况,而且...我有一个小型busybox设备,希望非root用户能够使用root特权执行特定脚本。例如,类似以下这样$1的小脚本来启用DHCP,其中在cmdline(!!)上发送的唯一变量()是要发送的主机名: #!/bin/bash udhcpc -b -i eth0 -h $1 像这样运行udhcpc需要root用户访问权限,因此,我计划进行修改/etc/sudoers以包含此行: joe ALL = NOPASSWD: /path/to/enable_dhcp.sh 只需运行以下命令,即可使“ joe”轻松地以root特权运行该脚本: sudo /path/to/enable_dhcp.sh 而不是要求输入密码(这是我想要的,因为我希望joe能够编写此脚本)。 现在..我知道(或者至少我认为这样做),$1在可以轻松使用root特权运行的脚本中使用是一个可怕的想法,因为您可以向其中注入任何内容。 那么...解决此问题的最佳方法是什么?我如何让Joe用root特权执行我想做的事情,如何允许他传入变量(或者像使用环境变量那样有效地传递变量),同时又不对注入攻击敞开大门?

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.