【发布时间】:2020-11-18 07:26:05
【问题描述】:
我正在尝试制作一个脚本来自动创建文件并在文件中输入某些数据,有点像模板。例如,如果脚本名为cpp(只是一个示例,不是实际的脚本名称),当我运行cpp <filename> 时,它应该在当前目录中创建一个文件,而无需我告诉它目录是什么。现在,我必须将根目录硬编码到脚本中。脚本的基本功能是这样的(我有验证和东西,但这是主要功能):
touch "$FILE_PATH" (this is the part that I have to hard code)
echo -e "#include <bits/stdc++.h>\n\nusing namespace std;\n\nint main() {\n\t\n}" > "$FILEPATH"
nvim "$FILE_PATH"
在这种情况下,我必须将文件路径声明为FILE_PATH="$HOME/<a specific directory>/$1.cpp",这意味着当我调用脚本时,我必须传递一个相对于硬编码位置的参数,比如cpp automation/file_manager/shell/apartment。有没有办法让 shell 脚本自动找到调用它的目录,因此它可以更加动态和灵活(转到目录automation/file_manager/shell/apartment 并调用cpp apartment 以获得相同的结果)?有点像 vim 或 neovim,它在当前目录中创建一个文件。
【问题讨论】:
-
移除 C++ 标签。这无关紧要。
-
为什么需要完整路径?
touch和nvim适用于当前目录中的文件。 (相对文件名)。 -
“调用”的目录是什么意思?如果您指的是启动它的进程的工作目录(即运行它的 shell 的工作目录),那么很简单:脚本继承了相同的工作目录,因此您可以在脚本中使用相对路径,它们'将自动相对于该目录进行解析。
-
顺便说一句,我总是建议不要使用
echo -e或-n--echo的某些版本只是将它们作为输出的一部分打印出来,我不得不重写脚本,因为操作系统更新改变了这种行为。printf更好(但使用起来更复杂)。 -
离题:查看stackoverflow.com/q/2953081/3220113 以获得在文件中写入多行的更简单方法。
标签: bash shell automation sh