因此,我使用 Windows Bash 创建了一个 .sh 文件(位于 ~/../ 中的 passwords.sh),并在其上运行了以下命令:
chmod 600 passwords.sh
sudo shown toot:root passwords.sh
然后在我的.bash_profile(位于主文件夹〜/)中我有以下功能
function passwords {
case "1$" in
'update')
'sudo vim ~/../passwords.sh';;
*)
'sudo bash ~/../passwords.sh';;
esac
}
直接从终端运行命令不会产生任何问题;
ruben@DESKTOP-4RTTB0B:/home$ sudo bash ~/../passwords.sh
[sudo] password for ruben:
[content displayed as intentionally]
ruben@DESKTOP-4RTTB0B:/home$ sudo vim ~/../passwords.sh
[open with vim editor]
但运行新功能会产生
ruben@DESKTOP-4RTTB0B:/home$ passwords
-bash: sudo bash ~/../passwords.sh: No such file or directory
ruben@DESKTOP-4RTTB0B:/home$ passwords update
-bash: sudo vim ~/../passwords.sh: No such file or directory
为什么它在终端中有效,但在 .bash_profile 文件中无效?.bash_profile 文件中的其他类似功能可以正常工作。感谢大家的帮助^^
答案1
你不应该引用命令。这样写:
function passwords {
case "$1" in
'update')
sudo vim ~/../passwords.sh;;
*)
sudo bash ~/../passwords.sh;;
esac
}
答案2
问题是,波浪号~
不会在任何类型的引号中展开。因此,您需要按如下方式更改相关行:
sudo vim ~'/../passwords.sh';;
或更好:
sudo vim "$HOME/../passwords.sh";;
并且为什么不(在这种情况下)使用完整路径而不是相对路径:
sudo vim "/home/passwords.sh";;
命令中的引号用于分隔命令位置参数的值,否则您需要转义每个空格或任何其他特殊字符:
command 'first positional parameter' 'second one' "$THE_THIRD" our\ forth\ parameter
注意,大多数 shell 只会扩展双引号内的变量,在单引号内,变量名称将被视为字符串,不会扩展。