linux - 相对于另一个用户的主目录执行脚本
问题描述
我是 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
它奏效了!
解决方案
在 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 上设置了执行标志,则会执行此操作。