如何从 shell 文件的 运行 从 Linux 获取路径?

How to get path from where shell file was run from Linux?

我已经创建了一个用于在目录中创建文件的自定义脚本。 /mnt/c/Users/username/Documents/mkfile.sh(我正在为 Linux 使用 windows 子系统)

dir_str=
dir_arr=($(echo $dir_str | tr "[\\/]" "\n"))
dir_path=""
file_name=""

for i in "${!dir_arr[@]}"
do 
  dirArrLen=${#dir_arr[@]}
  if [ $(($i+1)) -ge $dirArrLen ] 
  then
    sudo touch "${dir_path}/${dir_arr[$i]}"
    file_name=${dir_arr[$i]}
    # echo "${dir_path}/${dir_arr[$i]}"
  elif [ $(($i+1)) -eq 1 ]
  then
    # to avoid starting slash
    sudo mkdir "${dir_arr[$i]}"
    dir_path=${dir_arr[$i]}
    # echo $dir_path
  else
    sudo mkdir "${dir_path}/${dir_arr[$i]}"
    # echo "${dir_path}/${dir_arr[$i]}"
    dir_path="${dir_path}/${dir_arr[$i]}"
  fi
done
echo "File ${file_name} has been created successfully in ${dir_path}"

当它在 mkfile shell 脚本文件所在的路径 (/mnt/c/Users/username/Documents/) 中执行时,它现在会成功创建一个文件。 例如:

Input :

/mnt/c/Users/username/Documents$./mkfile.sh hello/world/new.txt

Output: It creates a new.txt file inside like : /mnt/c/Users/username/Documents/hello/world/new.txt

File new.txt has been created successfully in hello/world

但是当我将文件移动到主目录时,将其添加到 ~/.bashrc 文件中的别名(使其成为自定义 shell 命令)

alias mkfile="~/mkfile.sh"

这个 shell 脚本不工作(我认为这是试图在主目录中创建一个文件 从它被调用的地方),例如:

username@DESKTOP-SELKMGP:/mnt/c/Users/username/Documents/$ mkfile hello/world/new.txt

不创建任何 directory/file 内部文档。

问题:

位于主目录中的 mkfile.sh 文件中是否有任何方法可以捕获输入命令的目录路径,

例如:

输入:

/mnt/c/Users/username/Documents$ mkfile hello/world/new.txt

预期: 在位于主目录中的 ~/mkfile.sh 中,我想得到: /mnt/c/Users/username/Documents/

我试过 pwd 但是输出的是主目录路径而不是输入命令的路径 而且 realpath [=22=] 没有用

我明白你的问题是什么,我认为你应该设置别名如下:

alias mkfile="~/mkfile.sh $(pwd)"

此命令将其调用位置的完整路径作为 dir_str

发送到脚本

试试这个,希望对您有所帮助。