相关疑难解决方法(0)

如何获取文件的完整路径?

有没有一种简单的方法可以打印完整的路径file.txt

file.txt = /nfs/an/disks/jj/home/dir/file.txt
Run Code Online (Sandbox Code Playgroud)

<command>

dir> <command> file.txt  
Run Code Online (Sandbox Code Playgroud)

应该打印

/nfs/an/disks/jj/home/dir/file.txt
Run Code Online (Sandbox Code Playgroud)

unix linux file path

669
推荐指数
9
解决办法
86万
查看次数

如何在Mac上获取GNU的readlink -f的行为?

在Linux上,该readlink实用程序接受一个-f跟随其他链接的选项.这似乎不适用于Mac和可能基于BSD的系统.相当于什么?

这是一些调试信息:

$ which readlink; readlink -f
/usr/bin/readlink
readlink: illegal option -f
usage: readlink [-n] [file ...]
Run Code Online (Sandbox Code Playgroud)

macos freebsd sh

341
推荐指数
13
解决办法
11万
查看次数

如何最好地包含其他脚本?

通常包含脚本的方式是"源"

例如:

main.sh:

#!/bin/bash

source incl.sh

echo "The main script"
Run Code Online (Sandbox Code Playgroud)

incl.sh:

echo "The included script"
Run Code Online (Sandbox Code Playgroud)

执行"./main.sh"的输出是:

The included script
The main script
Run Code Online (Sandbox Code Playgroud)

...现在,如果您尝试从其他位置执行该shell脚本,除非它在您的路径中,否则无法找到包含.

确保脚本可以找到包含脚本的好方法是什么,特别是如果脚本需要可移植的话?

bash

338
推荐指数
11
解决办法
31万
查看次数

在docker容器中装入带有符号链接的主机目录

我用这个参数挂载了容器:

-v/home/test /:/ home/test

在主机内部/ home/test中有一个指向/ mnt /文件夹的符号链接.

但是这个链接,虽然可以看到指向的位置,但似乎在容器内部被破坏了:

root@f93f72b45013:/var/www/html# cd /home/test/ 
root@f93f72b45013:/home/test# ls -lrt 
total 11956 
lrwxrwxrwx. 1 root root 40 Jul 20 15:55 file -> /mnt/mountedfile/
root@f93f72b45013:/home/test# ls -lrt file/*
ls: cannot access file/*: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这甚至可以在码头工作中完成吗?我不确定是否有办法做到这一点.

我知道我可以直接挂载符号链接指向的位置,但我只是想知道这是否可能.

docker

72
推荐指数
4
解决办法
4万
查看次数

我怎样才能在bash中诋毁符号链接?

如何获取任何给定路径bash并将其转换为规范形式,取消引用路径中可能包含的任何符号链接?

例如:

~$ mkdir /tmp/symtest
~$ cd /tmp/symtest/
/tmp/symtest$ mkdir -p foo/bar cat/dog
/tmp/symtest$ cd foo/bar/
/tmp/symtest/foo/bar$ ln -s ../../cat cat
/tmp/symtest/foo/bat$ cd ../../
/tmp/symtest$ tree
.
|-- cat
|   `-- dog
`-- foo
    `-- bar
       `-- cat -> ../../cat

6 directories, 0 files
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得完整的规范路径/tmp/symtest/foo/bar/cat(即:)/tmp/symtest/cat

bash symlink

42
推荐指数
1
解决办法
3万
查看次数

Bash:如何获得符号链接的真实路径?

是否有可能在/ usr/local/bin文件夹中执行符号链接的文件,以获取原始脚本的绝对路径?好吧,..我知道原始文件在哪里,我知道它因为我正在链接它.但是,即使我移动原始源代码(和符号链接),我希望这个脚本正常工作.

#!/bin/bash
echo "my path is ..."
Run Code Online (Sandbox Code Playgroud)

bash symlink

10
推荐指数
3
解决办法
2万
查看次数

当通过sym链接调用时,如何在脚本本身内获取脚本文件路径

当我需要在脚本本身内部获取脚本文件的路径时,我使用以下内容:

`dirname $0`
Run Code Online (Sandbox Code Playgroud)

这工作文件,直到我通过sym链接调用脚本.在这种情况下,上面的代码打印链接的位置而不是原始文件.

有没有办法获取原始脚本文件的路径,而不是链接?

谢谢,迈克

linux bash scripting

8
推荐指数
3
解决办法
2万
查看次数

如何列出符号链的所有成员?

查找java二进制文件可能很痛苦:

  • which java/usr/bin/java
  • lh $(which java)/usr/bin/java -> /etc/alternatives/java
  • lh /etc/alternatives/java/etc/alternatives/java -> /usr/lib/jvm/jdk1.8.0_66/bin/java

有没有办法自动跟踪符号链并打印所有成员?例如whichfollowfollow /usr/bin/java可以给:

/usr/bin/java
-> /etc/alternatives/java
-> /usr/lib/jvm/jdk1.8.0_66/bin/java
Run Code Online (Sandbox Code Playgroud)

bash symlink symlink-traversal

4
推荐指数
3
解决办法
605
查看次数

你怎么能使用纯粹的unset shell内置?你能编写一些免于篡改的shell脚本吗?

我的意思是我想使用unset它本身不是shell函数.如果我能做到这一点,我可以command通过跑步来确保它是纯粹的

#!/bin/sh
{ \unset -f unalias command [; \unalias unset command [ } 2>/dev/null;
# make zsh find *builtins* with `command` too:
[ -n "$ZSH_VERSION" ] && options[POSIX_BUILTINS]=on
Run Code Online (Sandbox Code Playgroud)

如果我使用的是Debian Almquist shell(破折号),我认为我可以依赖它\unset是纯粹的.至少我不能定义一个名为shell函数unsetdash.而在我bash或之中zsh我可以定义unset() { echo fake unset; },然后我无法取消该功能:\unset -f unset输出"假未设置".

与此相关,在bash脚本中,可以导出函数,export -f <function name>以便可以在bash脚本调用的脚本中使用它.但是,这在dash脚本中不起作用.我想知道,如果我不得不担心一个命令被定义为我写的脚本文件外的shell函数,如果我正在使用dash?其他POSIX兼容的shell怎么样?

security bash zsh sh dash-shell

3
推荐指数
2
解决办法
684
查看次数

标签 统计

bash ×6

symlink ×3

linux ×2

sh ×2

dash-shell ×1

docker ×1

file ×1

freebsd ×1

macos ×1

path ×1

scripting ×1

security ×1

symlink-traversal ×1

unix ×1

zsh ×1