如何解决使用文件内容作为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]
,
我还没有看到您尝试的任何示例。但是,有更简单的方法可以实现您的目标。
流行别名
例如, ll
是ls -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 举报,一经查实,本站将立刻删除。