0

我想要做的是将参数传递给第二个程序,它需要 cmdline-args 并用 sudo 打开,但与我传递给 sudo 的 stdin 没有任何关系。

下面是一个例子来了解我想要做什么。

echo "mypass" | sudo -S nvim "filename"

这里 sudo 必须采用标准输入,而 nvim 必须采用来自 cmdline-arg 的文件名。但是 nvim 打开一个未命名的文件并将标准输入放入该文件中,甚至不关心我传递给它的参数。

我的最终目标不仅是在不输入密码的情况下打开文件,而且要了解如何以我想要的方式传递参数

甚至可能吗?

4

3 回答 3

0

正如你所拥有的,它似乎应该可以工作。
也许明确地尝试 bash 调用。即使您需要单独的输入重定向,这也有效。

$ echo "$pw"|sudo -S bash -c "head -3 < foo"
0
1
2

如果您需要传递文件参数,可能会在其他地方显式绑定您的标准输入。

$ echo "$pw"|sudo -S bash -c "head -5 foo </dev/null"
0
1
2
于 2021-08-10T13:41:20.133 回答
0

由于the sudo不需要为两个连续的sudo命令重复密码,我应该发出两个连续的命令:

echo "mypass" | sudo -S -v 
sudo nvim "filename"         # will not prompt for password this time

说明:sudo -v只更新凭据sudo而不执行任何命令。

于 2021-08-10T13:54:30.583 回答
0

只需将文件名作为脚本的第一个参数传递:

echo "<your password>" | sudo -S nvim "$1"

并使用以下命令调用脚本:

./script.sh myfile.txt

请注意,根据凭据是否已缓存,-S选项的行为会有所不同。sudo最好还使用-k使凭据无效的选项:

echo "<your password>" | sudo -k -S nvim "$1"
于 2021-08-10T15:13:07.690 回答