使用文件内容作为Bash命令的一部分

如何解决使用文件内容作为Bash命令的一部分

我想将file.txt的内容用作bash命令的一部分。 假设我要执行的bash命令及其选项为:

my_command -a first value --b_long_version_option="second value" -c third_value

但是前两个选项(-a和--b_long_version_option)非常冗长,因此我不是直接在命令行(或bash脚本)中插入,而是将它们写在file.txt中,如下所示:

-第一个值\
--b_long_version_option =“第二个值”

现在,我希望使用以下语法(其中“ path_to / file.txt”是file.txt的路径,以相对或绝对形式表示)调用命令“ my_command”:

my_command "$(cat path_to/file.txt)" -c third_value

但是,这不是正确的语法,因为我的命令中断并抱怨。

我应该如何编写命令和/或file.txt的新版本,使其等同于其本机bash用法

谢谢!

解决方法

引号保留换行符。把他们赶走。 除非您正在运行旧的bash解析器,否则您也不需要cat

my_command $(<path_to/file.txt) -c third_value

您需要在 out 行的末尾加上反斜杠。

尽管如此,请小心做。最好将整个命令放在文件中,而不只是其中的一部分。如果您真的只想要参数,则可以在数组中更仔细地定义它们,获取文件,然后应用它们,如下所示:

file中:

myArgs=( "-a" "first value" 
         "--b_long_version_option=second value"
)

请注意引用。然后运行

. file
my_command "${myArgs[@]" -c third_value

例如

$: printf "[%s] " "${myArgs[@]}" -c=foo
[-a] [first value] [--b_long_version_option=second value] [-c=foo]
,

我还没有看到您尝试的任何示例。但是,有更简单的方法可以实现您的目标。

流行别名

例如,

llls -al的bash别名。通常在.bash_profile.bashrc中定义如下:

alias ll='ls -al'

因此,您可以做的是为速记命令设置另一个别名。

alias mycmd='mycommand -a first value --b_long_version_option="second value"'

然后您可以按以下方式使用它:

mycmd -c third_value

配置文件

您还可以为默认参数定义一个mycommand.json文件或mycommand.ini文件。然后,您需要在软件中检查配置文件,并从中分配参数。

使用配置文件是更高级的解决方案。您可以定义多个配置文件。例如,您可以在/etc/mycommand/config.ini中设置默认配置文件。在不同目录上运行时,应检查${cwd}/mycommand.ini以检查本地配置文件是否存在。您甚至可以在命令中添加--config-file参数。

对于小任务或变化不大的事情,使用别名更为方便。如果您的命令在其他项目中的行为应有所不同,则使用配置文件将是更好的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?