我有一个 Python 脚本,可以在相对目录中查找文件。例如:Python 脚本在/home/username/projectname/. 我有一个在 Python 脚本中调用的文件,该文件位于/home/username/projectname/subfolder.
如果我从 shell 运行脚本,因为python scriptname.py它运行得非常好。
但是,我正在尝试将该脚本作为启动服务运行。我在 webmin 中设置它,我相信它创建了一个 shell 脚本来调用它。通过启动脚本,我正在做这样的事情来调用脚本:
execute python home/username/projectname/scriptname.py
Run Code Online (Sandbox Code Playgroud)
脚本启动正常,但无法访问相关目录中的文件。
我猜有一种更好的方法可以从启动脚本中调用 Python 程序,以便它知道相对路径。
考虑:
$ pwd
/home/user
$ ls -l
total 3604
lrwxrwxrwx 1 user user 19 Nov 27 12:11 pages -> /var/www/pages/
$ cd pages
$ pwd
/home/user/pages
$ readlink -f .
/var/www/pages
$ cd ..
$ readlink -f .
/home/user
$
Run Code Online (Sandbox Code Playgroud)
当我在的时候,/var/www/pages我想上去,/var/www但是跑步cd ..让我去/home/user。显然,这是由于/var/www/pages通过符号链接获得的。当我在一个符号链接中时,我怎样才能cd建立一个目录?
我接受了实习面试,我得到了与这个相同的问题:http : //www.glassdoor.com/Interview/Which-2-letter-POSIX-command-is-different-from-all-the-others- QTN_498236.htm
答案是对的,是的cd(正如面试官告诉我的那样)。我对这一点很困惑。为什么cd不同?我跟面试官说不一样,因为可能不会被“shell”实现,但当时我不知道我在说什么。
我经常需要执行这两个命令:
mkdir abc
cd abc
Run Code Online (Sandbox Code Playgroud)
我很好奇是否有一个简单的命令(或我可以创建和使用的别名)一次性完成,例如
user@GROUP:~$ mdcd abc
user@GROUP:~/abc$
Run Code Online (Sandbox Code Playgroud)
这可能吗?
众所周知,cd没有参数将一个人的当前目录更改为他们的主目录。我想知道在使用这样的cd命令后是否有任何方法可以返回到运行之前所在的目录位置cd?
概括地说,有没有办法在一个人已经cd-ed 到另一个目录后返回到前一个目录?这两个问题的答案似乎很可能相同,但如果不是我将它们分开,因为第一个问题是我想要回答的主要问题。
我想使用过滤器转到目录
例如有一个名为的文件 this-is-awsome
ls | grep this-is-awsome | xargs cd
Run Code Online (Sandbox Code Playgroud)
如何进入带有过滤器的目录?
我有多个父目录,它们下面有相同的文件结构。
例子:
parent1/suba/subb/
parent2/suba/subb/
Run Code Online (Sandbox Code Playgroud)
当我在的时候parent1/suba/subb,我想改为parent2/suba/subb不做类似的事情cd ../../../parent2/suba/subb。如何在不列出所有子目录和../s 的情况下执行此操作?
在测试环境中,我们有一个日志文件的目录结构,如下所示:
/var/Logs/int/app-id/region-code/log/file-name.log
/var/Logs/sat/app-id/region-code/log/file-name.log
/var/Logs/cat/app-id/region-code/log/file-name.log
Run Code Online (Sandbox Code Playgroud)
每个环境有许多应用程序 ID,每个应用程序 ID 有多个区域代码(取决于应用程序)。
是否有一个命令可以让我将目录从 int 更改为 sat,并使路径的所有其余部分保持不变?类似于以下内容:
$ pwd
/var/Logs/int/abc/01/log
$ cdswap int sat
$ pwd
/var/Logs/sat/abc/01/log
$ cdswap abc def
$ pwd
/var/Logs/sat/def/01/log
Run Code Online (Sandbox Code Playgroud)
如果这也有效,那将是一个奖励:
$ cdswap def/01 ghi/02
$ pwd
/var/Logs/sat/ghi/02/log
Run Code Online (Sandbox Code Playgroud)
如果没有这样的命令,我可以设置一个别名来有效地做同样的事情吗?那会怎样?
谢谢你的帮助!
我经常使用符号链接,并且几乎将我的整个主目录链接到一个文件夹.other或.dotfiles. 当我进入我的主目录并尝试进入文件夹时.config/,它实际上是指向.other/.config/.
如果.config/是普通目录,我只需键入cd .con并点击tab 即可。Bash 会自动将其扩展为.config/(只要没有其他以 开头的文件/目录.con)。不幸的是 bash 有这个小障碍,当通过符号链接导航时:Bash 只扩展到.config(not .config/),我必须再次点击tab来添加/(进一步)。
这只是次要的,但是即使在符号链接扩展之后,是否有可能让 bash 添加斜杠?
通配和外壳扩展是一回事吗?我正在通过编写自定义 shell 来学习 C,我也在学习 POSIX。现在我想知道是否是 POSIX 合规性cd -让您回归,这是否~意味着主目录?因为并非所有 shell 都可以做到这一点,而且我不知道是否需要 cd 命令的最小 POSIX 合规性。我使用的实现是
int do_cd(int argc, const char **argv) {
const char *path;
if (argc > 1) {
path = argv[1];
}
else {
path = getenv("HOME");
if (path == NULL) {
fprintf(stderr, "No HOME environment variable\n");
return 1;
}
}
if (chdir(path) < 0) {
perror(path);
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)