因此,使用windows,我创建了一个.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]但是运行新函数yeilds
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文件中的其他类似元素可以正常工作。谢谢你的帮助^^
发布于 2020-02-27 10:30:51
你不应该引用命令。写成这样:
function passwords {
case "$1" in
'update')
sudo vim ~/../passwords.sh;;
*)
sudo bash ~/../passwords.sh;;
esac
}发布于 2020-02-27 10:32:19
问题是,倾斜~不会在任何类型的引号中展开。因此,您需要以这样的方式更改相关行:
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将只在双引号内展开变量,在单引号内,变量的名称将被视为字符串,不会被展开。
https://askubuntu.com/questions/1213381
复制相似问题