相关疑难解决方法(0)

eval 和 exec 有什么区别?

eval并且exec都内置在执行命令的 bash(1) 命令中。

我也看到exec有几个选项,但这是唯一的区别吗?他们的上下文会发生什么?

shell bash shell-builtin

100
推荐指数
4
解决办法
12万
查看次数

通过变量名获取环境变量?

例如,我有一个变量:

env_name="GOPATH"
Run Code Online (Sandbox Code Playgroud)

现在我想像这样获取环境变量GOPATH

echo $GOPATH
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得$GOPATH通过$env_name

shell bash environment-variables

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

通过裁剪和调整大小将视频转换为固定的屏幕尺寸

我试图自己解决这个问题,但无数的选择让我感到困惑。

我想理想地使用ffmpegmencoder(或其他东西,但我知道我正在工作的那两个)将任何传入的视频转换为固定的屏幕尺寸。

如果视频较宽或太短,则将视频居中裁剪。如果它不是正确的尺寸,则向上或向下调整大小以使其与固定的屏幕尺寸完全一致。

我需要的最后一件事是带有 MP3 音轨的 XVid AVI 中的 720x480。

我发现很多页面都显示了如何将大小调整为最大分辨率,但我需要视频恰好是该分辨率(裁剪掉多余的部分,没有黑条)。

任何人都可以告诉我要运行的命令行 - 或者至少让我了解一些/大部分方式吗?如果需要多个命令行(运行 X 以获得分辨率,执行此计算,然后使用该计算的输出运行 Y),我可以编写脚本。

ffmpeg video video-encoding mencoder

27
推荐指数
3
解决办法
5万
查看次数

一个像其他语言一样接受参数的 bash 函数?

我有一个 bash 函数来设置$PATH这样的——

assign-path()
{
    str=$1
    # if the $PATH is empty, assign it directly.
    if [ -z $PATH ]; then
        PATH=$str;
    # if the $PATH does not contain the substring, append it with ':'.
    elif [[ $PATH != *$str* ]]; then
        PATH=$PATH:$str;
    fi
}
Run Code Online (Sandbox Code Playgroud)

但问题是,我必须为不同的变量编写不同的函数(例如,为$CLASSPATHlikeassign-classpath()等编写另一个函数)。我找不到将参数传递给 bash 函数的方法,以便我可以通过引用访问它。

如果我有类似的东西会更好 -

assign( bigstr, substr )
{
    if [ -z bigstr ]; then
        bigstr=substr;
    elif [[ bigstr != *str* ]]; then
        bigstr=bigstr:substr;
    fi
}
Run Code Online (Sandbox Code Playgroud)

任何想法,如何在 bash …

bash bash-script

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

如何在bash中将带有值的字符串作为命令运行?

这是我的小 bash 脚本片段。

i=5
command='echo $i'
$command
Run Code Online (Sandbox Code Playgroud)

我希望这个脚本打印,5即,我希望它运行 echo 并打印 5。但它一直在打印$i。那么我该如何解决这个问题呢?

bash string shell-script command

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

Shell 中的 eval 有哪些有用的用例?

您经常听到它eval is evil,无论是在 Shell/POSIX 世界中,还是在其他语言(如 python 等)中...

但我想知道,它真的没用吗?或者是否有一些神秘的、未记录的、有趣的或只是有用的用例?

如果答案以sh/bash为中心,我会更喜欢,但如果它也与其他壳有关,那也没关系。

PS:我 知道 为什么EVAL被认为evil

shell eval

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

为什么以及何时应该在 shell 脚本中避免使用 eval?

该站点上的许多答案和评论都提到通常应避免eval在 shell 脚本中使用。这些评论通常是针对初学者的。

我已经看到提到安全问题和健壮性,但很少有例子。

我已经明白命令什么,以及如何使用它eval。但是,那里给出的答案仅简要提及使用eval. 值得注意的是,每个答案都指出这eval可能是一个主要的安全漏洞,但大多数只是将这一事实作为结束语而没有详细说明。这似乎值得进一步考虑,实际上是它自己的问题。

为什么eval一个坏主意?

它适当地使用?

是否有任何指导方针可以完全安全地使用它,或者它总是不可避免地存在安全漏洞?


编辑:这篇文章是我在发布这个问题时实际寻找的那种规范参考(答案)。任何滥用的人eval都可以指向此参考。

shell-script eval

8
推荐指数
2
解决办法
9050
查看次数

通过更改变量名称前缀重命名环境变量

我有一些环境变量。我想动态转换多个这样的值。

环境变量:我正在使用printenv | grep proj_env_repo(这样做printenv | grep $value)来获取这个环境变量。

所以价值是 proj_env_repo

我的结果是

proj_env_repo_db_username=username
Run Code Online (Sandbox Code Playgroud)

我想把它转换成 TF_ENV_db_username=username

有人可以帮我吗?我正在寻找 bash 脚本中的函数。

bash sed shell-script environment-variables

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

我想回显 a1、a2、a3 中的值。但是我的代码只打印 a1、a2 和 a3 而不是存储在它们里面的值

a1="one"
a2="two"
a3="three"
for ((i=1;i<=3;i=i+1)); do
     echo $a$i
done 
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以下

  1. echo ${a$i}
  2. echo $((ai))
  3. echo ${a}${i}
  4. c=$(echo a$i)

但没有人给出正确答案。

shell variable-substitution variable

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