【问题标题】:How to use the directory a shell script is called from?如何使用调用 shell 脚本的目录?
【发布时间】: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/&lt;a specific directory&gt;/$1.cpp",这意味着当我调用脚本时,我必须传递一个相对于硬编码位置的参数,比如cpp automation/file_manager/shell/apartment。有没有办法让 shell 脚本自动找到调用它的目录,因此它可以更加动态和灵活(转到目录automation/file_manager/shell/apartment 并调用cpp apartment 以获得相同的结果)?有点像 vim 或 neovim,它在当前目录中创建一个文件。

【问题讨论】:

  • 移除 C++ 标签。这无关紧要。
  • 为什么需要完整路径? touchnvim 适用于当前目录中的文件。 (相对文件名)。
  • “调用”的目录是什么意思?如果您指的是启动它的进程的工作目录(即运行它的 shell 的工作目录),那么很简单:脚本继承了相同的工作目录,因此您可以在脚本中使用相对路径,它们'将自动相对于该目录进行解析。
  • 顺便说一句,我总是建议不要使用 echo -e-n -- echo 的某些版本只是将它们作为输出的一部分打印出来,我不得不重写脚本,因为操作系统更新改变了这种行为。 printf 更好(但使用起来更复杂)。
  • 离题:查看stackoverflow.com/q/2953081/3220113 以获得在文件中写入多行的更简单方法。

标签: bash shell automation sh


【解决方案1】:

你可以使用

`目录名 $0` 在你的 bash 脚本中。这将采用放置脚本的目录的值。只要您有正确的访问权限,您就可以从任何地方执行您的 bash。

良好做法:

#初始化目录名 dir=`目录名 $0` #初始化你的文件名 文件="我的文件名" #根据需要使用: # 在当前 bash 目录中创建文件 触摸 $dir/$file # 追加 echo -e "my_cpp_script" >> $dir/$file #称呼 cpp $目录/$文件

【讨论】:

  • 这实际上并没有回答问题。这会将文件放在放置脚本的位置,这不是问题所在。题中的cmets是对的,不需要指定目录。
  • 好吧,我的错。希望这对其他人有帮助。
猜你喜欢
  • 1970-01-01
  • 2021-03-05
  • 2017-12-03
  • 2016-10-26
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多