寻址用户主目录的正确方法

2 command-line bash home-directory

我正在为调用其他脚本的 Ubuntu VPN 创建一个对话框菜单,如下所示:

cd
cd myrepo/gui
./filetocall.sh
Run Code Online (Sandbox Code Playgroud)

第一个cd是确保第二个的目录cd始终是 home。

有没有更好的方法可以用一行来解决这个问题?(在路径中没有特别命名用户,所以它可以在少数设备上安装和使用?)

小智 6

~(波浪号) 或$HOME可用于获取当前用户的主目录,因此您可以执行以下操作:

cd ~/myrepo/gui
cd "$HOME/myrepo/gui"
Run Code Online (Sandbox Code Playgroud)

甚至直接执行:

~/myrepo/gui/filetocall.sh
"$HOME"/myrepo/gui/filetocall.sh
Run Code Online (Sandbox Code Playgroud)

  • 如果`filetocall.sh` 期望CWD 是`~/myrepo/gui`,那么直接执行它可能会导致问题。分两步执行 cd 和可执行文件调用将阻止这种情况。 (2认同)
  • @KevinJohnson 确实如此,但我认为这是 `filetocall.sh` 中的一个错误。 (2认同)

wal*_*tor 6

使用与 相同的方法login,避免被 的重新定义所迷惑$HOME

homedir="$(getent passwd $( /usr/bin/id -u ) | cut -d: -f6)"
cd "$homedir"
Run Code Online (Sandbox Code Playgroud)

  • 好吧,这不像我经常重新定义`$HOME`,但是当我这样做时,它*正是*因为我希望像这样的脚本使用该目录代替...... (4认同)