标签: parameter

参数顺序与 tar 有关系吗?

我正在学习 Linux。我很惊讶地看到参数顺序在制作 tarball 时似乎很重要。

tar -cfvz casual.tar.gz snapback.txt bucket.txt
Run Code Online (Sandbox Code Playgroud)

给出错误:

tar: casual.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)

但是如果我发出这样的命令:

tar -cvzf casual.tar.gz snapback.txt bucket.txt
Run Code Online (Sandbox Code Playgroud)

tarball 的创建没有错误

谁能向我解释为什么参数顺序在这个例子中很重要,或者我可以在哪里找到这些信息来了解为什么?我按照我在第一个示例中所做的方式进行了尝试,该示例收到了一个错误,即首先放置所需参数 c 和 f 的逻辑,然后是我的其他参数。

我想完全吸收 Linux,包括理解为什么会发生这样的事情。提前致谢!

linux tar parameter

20
推荐指数
2
解决办法
2856
查看次数

如何在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
Run Code Online (Sandbox Code Playgroud)

我尝试$1在函数中使用等,但是它只需要调用整个脚本的全局函数。基本上我正在寻找的是类似的东西$1$2等等,但在函数的本地上下文中。如您所知,函数可以在任何适当的语言中工作。

bash parameter function syntax

20
推荐指数
2
解决办法
11万
查看次数

执行函数参数提供的命令

我正在尝试在 bash 脚本中创建一个函数方法,该脚本执行由参数提供给该方法的命令。

意思是这样的:

special_execute()
{
    # Some code

    # Here's the point where the command gets executed
    $@

    # More code
}

special_execute echo "abc"
Run Code Online (Sandbox Code Playgroud)

我已经尝试过我$@"$@"$*"$*"我怎么能这样做呢?

bash parameter function command bash-script

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

GRUB2 和内核 vga= 参数

根据文档,vga=从 GRUB2 开始不推荐使用内核参数。某些较新的内核似乎不再在某些适配器上支持它这一事实无关紧要,因为我拥有的显卡已有七到八年的历史了。

现在的问题是我想使用更高分辨率的文本模式,例如 80x50 而不是默认的 80x25 字符。显然,该显卡 (ATI Rage XL) 的所有图形 (VBE/VESA) 模式都不存在 - 可用模式列表仅0通过6. 680x60但看起来很可怕,所以我想用1(80x50)。

在获取可用模式列表后,我已经看到 80x50 和 80x60 在不支持默认模式(默认已注释掉GRUB_TERMINAL=console)并且提示我选择时工作。

如果我不应该在内核命令行上设置模式并且每次使用GRUB_GFXMODE(有或没有预加载vbe模块)并且GRUB_GFXPAYLOAD_LINUX=keep失败,我该如何设置模式?失败:屏幕保持空白,因为它是我在这台机器上使用的卡的无效图形模式?

我的想法是nomodeset仍然传递给内核,但是引导加载程序仍然必须设置图形模式。除了vga=内核参数之外,我看不到任何其他选项。

注意: GRUB2 控制台上的vbetestvideotest命令会使屏幕变黑,然后在声称没有视频输入后屏幕会切换到睡眠模式。vbeinfovideoinfo显示除上述以外的一些可用模式,但没有提到应该在哪里设置。此外,当在内核命令行上传递vga=1(没有nomodeset)时,我看到一个关于它被弃用的非常简短的警告,但它太长而无法完全阅读 - 并且输出没有出现在dmesg.

boot parameter grub2 linux-kernel

18
推荐指数
2
解决办法
7万
查看次数

bash函数中的可选参数

我有一个功能可以快速创建一个新的 SVN 分支,看起来像这样

function svcp() { svn copy "repoaddress/branch/$1.0.x" "repoaddress/branch/dev/$2" -m "dev branch for $2"; }
Run Code Online (Sandbox Code Playgroud)

我用它来快速创建一个新分支,而无需查找和复制粘贴地址和其他一些东西。但是,对于消息(-m 选项),我想要它,以便如果我提供第三个参数,则将其用作消息,否则使用“dev branch for $2”的“默认”消息。有人可以解释这是如何完成的吗?

bash parameter function

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

echo $-1 显示什么?

echo $-1, echo $-2, echo $-3..的输出是什么意思?

在我的一个 Linux 机器上,它显示了我:

echo $-1
imsBEl1
echo $-2
imsBEl2
Run Code Online (Sandbox Code Playgroud)

在另一个 Linux 机器上,它显示:

echo $-1
himBH1
echo $-2
himBH2
Run Code Online (Sandbox Code Playgroud)

它们是映射到某些内存位置还是其他东西?

shell parameter echo

15
推荐指数
3
解决办法
4750
查看次数

将选项传递给 makefile

生成文件

my_test:
ifdef $(toto)
        @echo 'toto is defined'
else
        @echo 'no toto around'
endif
Run Code Online (Sandbox Code Playgroud)

预期行为

$ make my_test
no toto around

$ make my_test toto
toto is defined
Run Code Online (Sandbox Code Playgroud)

当前行为

$ make my_test
no toto around

$ make my_test toto
no toto around
make: *** No rule to make target `toto'.  Stop.
Run Code Online (Sandbox Code Playgroud)

当我运行时,make my_test我按预期得到 else 文本no toto around。然而

make my_test toto
no toto around
make: *** No rule to make target `toto'.  Stop.
Run Code Online (Sandbox Code Playgroud)

生成文件版本

 $ make -v …
Run Code Online (Sandbox Code Playgroud)

make parameter

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

如何安全地将变量传递给启用 root 的脚本?

这个问题是完全通用的,不仅适用于我的情况,而且......我有一个小的 busybox 设备,我希望非 root 用户能够以 root 权限执行特定的脚本。例如,类似于这个启用 DHCP 的小脚本,其中$1在 cmdline (!!) 上发送的唯一变量 ( ) 是要发送的主机名:

#!/bin/bash
udhcpc -b -i eth0 -h $1
Run Code Online (Sandbox Code Playgroud)

像这样运行 udhcpc 需要 root 访问权限,因此为此我计划修改/etc/sudoers以包含以下行:

joe ALL = NOPASSWD: /path/to/enable_dhcp.sh
Run Code Online (Sandbox Code Playgroud)

这应该使“joe”能够通过简单地运行以root权限轻松运行该脚本:

sudo /path/to/enable_dhcp.sh
Run Code Online (Sandbox Code Playgroud)

并且没有被要求输入密码(这是我想要的,因为我希望 joe 能够编写此脚本)。

现在..我知道(或者至少我认为我知道$1在一个可以很容易地以 root 权限运行的脚本中使用是一个可怕的想法,因为你可以注入任何你想要的东西。

那么......处理这个问题的最佳方法是什么?我如何让 joe 以 root 权限做我想做的事,允许他传入一个变量(或者像使用环境变量那样有效地这样做),同时又不会对注入攻击敞开大门?

security bash sudo parameter shell-script

13
推荐指数
2
解决办法
3236
查看次数

以相反的顺序打印 shell 参数

我有点卡住了。我的任务是将参数以相反的顺序打印到我的脚本中,除了第三个和第四个。

我有的是这个代码:

#!/bin/bash

i=$#
for arg in "$@"
do
    case $i
    in
        3) ;;
        4) ;;
        *) eval echo "$i. Parameter: \$$i";;
    esac
    i=`expr $i - 1`
done
Run Code Online (Sandbox Code Playgroud)

由于我讨厌 eval(向 PHP 致意),我正在寻找没有它的解决方案,但我找不到。

如何动态定义参数的位置?

PS:不,这不是作业,我正在为考试学习 shell,所以我尝试解决旧考试。

bash parameter shell-script

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

运行 shell 脚本时,是否可以传递特定的位置参数而不必按顺序输入它们?

例如,如果我的脚本 ./foo 有 10 个参数,而我只想传递第 8 个参数。我目前知道如何做到这一点的唯一方法是:

./foo '' '' '' '' '' '' '' 'bar'
Run Code Online (Sandbox Code Playgroud)

有没有更简单/更好的方法?

parameter shell-script

13
推荐指数
2
解决办法
1112
查看次数