【问题标题】:How to get path from where shell file was run from Linux?如何从 Linux 运行 shell 文件的位置获取路径?
【发布时间】:2022-02-18 19:54:17
【问题描述】:

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

dir_str=$1
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}"

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

输入:

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

输出: 它在里面创建一个 new.txt 文件,如下所示: /mnt/c/Users/用户名/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

不会在文档中创建任何目录/文件。

问题:

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

例如:

输入:

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

预期: 在 ~/mkfile.sh 中位于我想要获取的主目录中: /mnt/c/Users/用户名/Documents/

我试过pwd,但输出的是主目录路径,而不是输入命令的路径 还有realpath $0 也没用

【问题讨论】:

标签: linux bash shell ubuntu


【解决方案1】:

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

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

此命令将调用脚本的完整路径发送为dir_str

试试这个,希望对你有帮助。

【讨论】:

  • 非常感谢。这工作得很好。
  • 我修改了前几行并添加了一些 dir_str=$2 dir_arr=($(echo $dir_str | tr "[\\\/]" "\n")) dir_path="" cd ~ cd $1 并修改了 ~/.bashrc 文件,就像你说的那样运行 source ~/.bashrc 进行刷新,现在它可以正常工作了。
  • 不客气,我很高兴能帮上忙,请给我的答案“Up Flag”。谢谢
  • 我从您的点赞中获得了赞誉,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多