如何将参数从 bash 脚本传递到“x-terminal-emulator -e bash -c”?

如何将参数从 bash 脚本传递到“x-terminal-emulator -e bash -c”?

假设我有这个脚本:

x-terminal-emulator -e bash -c 'echo hello > ~/text'

我将其命名为 foo.sh 并使其可执行。

如果执行此脚本,我的主文件夹中将有一个包含单词“hello”的文本文件。

现在如果我将其修改为:

x-terminal-emulator -e bash -c 'echo $1 > ~/text'

...我在这样的终端中执行它:

./foo.sh hello

我的主文件夹中有一个文本文件,其中不包含任何内容。

foo.sh 接收“hello”作为第一个也是唯一的参数 ($1)。那么为什么 bash 没有收到它呢?有没有一种方法可以将一个或多个参数从 foo.sh 传递到 bash ?

我尝试将参数存储在变量名中,然后将其导出,但它没有改变结果。

答案1

man bash


   -c        If the -c option is present, then commands are read from the
             first  non-option  argument  command_string.   If  there are
             arguments after the command_string, they are assigned to the
             positional parameters, starting with $0.

所以你可以做

x-terminal-emulator -e bash -c 'echo $0 > ~/text' "$1"

或者(如果您希望保留参数的“通常”编号)

x-terminal-emulator -e bash -c 'echo $1 > ~/text' _ "$1"

其中_可以替换为您选择的任何虚拟变量。

答案2

在 中bash -c 'echo $1 > ~/text'$1是在bash -c进程中扩展的,而不是在您的脚本中扩展的。您需要将原件传递$1bash -c

x-terminal-emulator -e "bash -c 'echo \$1 > ~/text' bash $1"

相关内容