首页 > 解决方案 > 相对于另一个用户的主目录执行脚本

问题描述

我是 Linux 脚本的初学者。不知何故,我无法获得正确的搜索字符串来找到答案。

我想运行一个相对于特定用户目录的脚本,例如:

~user/rel/path/to/script.sh

但我不知道“~user”会翻译成什么。它甚至可能包含空格。我应该引用它吗?如果是这样,怎么办?当我尝试使用引号时,我总是得到文件或文件夹不存在错误。

编辑

我认为这不是重复的。

我担心的是用引号运行以下内容:

“~user/rel/path/to/script.sh”

给我“找不到文件或文件夹”错误。但我不知道,~user 会翻译成什么。(该脚本将在许多不同的计算机上调用。用户名已给出,但主目录可以由每台计算机的所有者自由更改。)所以我害怕(作为 Linux 脚本初学者!!!)不带引号运行它喜欢:

~user/rel/path/to/script.sh

投票最多的答案(Java 系统属性和环境变量)实际上对我帮助最大。我只需要确认它在 Linux 上的工作方式相同。所以我在 VirtualBox 中安装了一个测试虚拟机并尝试:

cd /
sudo mkdir -p "test home dir/myuser"
sudo adduser myuser
sudo chown myuser:myuser "test home dir/myuser"
sudo usermod -d "/test home dir/myuser" myuser
su myuser
cd ~
echo '#!/bin/bash -x
  echo "here!"
' > test.sh
chmod +x test.sh 
exit
cd /
~myuser/test.sh

它奏效了!

标签: linuxbash

解决方案


在 Mac OS 上,您不需要引用。我不确定Linux。然而,如果

ls ~user

将导致 /dir 带有空格 /user/ 然后

sh ~user/rel/path/to/script.sh

将会

sh /dir\ with\ space/user/rel/path/to/script.sh

如果您相应地在 script.sh 上设置了执行标志,则会执行此操作。


推荐阅读