【发布时间】: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 也没用
【问题讨论】:
-
mkfile.sh过于详尽,并不总是有效。 (例如,包含空格的路径会失败(例如hello/a b/c.txt)。)onelinermkdir --parents -- "$(dirname -- "$1")" && touch -- "$1"更可靠。还有其他方法可以做到这一点。请参阅mkdir -p for files、Unix - create path of folders and file 和 One command to create a directory and file inside it linux command -
好的,感谢您的建议,但我想知道是否有任何方法可以接受执行命令的路径。