如何从 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
发送到脚本
试试这个,希望对您有所帮助。
我已经创建了一个用于在目录中创建文件的自定义脚本。 /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
试试这个,希望对您有所帮助。