- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我遇到了一个复杂的问题,我试着用下面的简单例子来解释它
在我的系统中我有
ubuntu@ubuntu:~/temp$ pwd
/home/ubuntu/temp
ubuntu@ubuntu:~/temp$ ls
temp1 test.sh
ubuntu@ubuntu:~/temp$
在 temp.sh 我有
#!/bin/bash
echo "Arg 0 = $0"
echo "Arg 1 = $1"
echo "Arg 0 Full Path $(readlink -f $0)"
echo "Arg 1 Full Path $(readlink -f $1)"
pushd /var/log
echo "Arg 0 = $0"
echo "Arg 1 = $1"
echo "Arg 0 Full Path $(readlink -f $0)"
echo "Arg 1 Full Path $(readlink -f $1)"
现在我在下面跑
ubuntu@ubuntu:~/temp$ ./test.sh temp1
Arg 0 = ./test.sh
Arg 1 = temp1
Arg 0 Full Path /home/ubuntu/temp/test.sh
Arg 1 Full Path /home/ubuntu/temp/temp1
/var/log ~/temp
Arg 0 = ./test.sh
Arg 1 = temp1
Arg 0 Full Path /var/log/test.sh
Arg 1 Full Path /var/log/temp1
在这里您可以看到 readlink
在发出 pushd
命令后显示了错误的 Arg0 和 Arg1 文件路径。如果我删除 popd 命令,那么它打印正常。
那么为什么这里的 readlink
行为不端?
最佳答案
给定相对路径,readlink
将相对于进程工作目录解释它们,并输出绝对路径(解析中间的符号链接(symbolic link))。
这里的关键点是进程工作目录(又名当前目录)。
所以 readlink ./path/to/file
将输出 /tmp/path/to/file
如果 /tmp
是当前目录(假设没有符号链接(symbolic link))。
您正在使用的另一个命令 pushd
将更改进程工作目录。
所以顺序
readlink ./path/to/file
pushd /some/other/place
readlink ./path/to/file
readlink
都可能解析为两个不同的绝对路径。
这里没有不当行为。一切由设计决定。
关于linux - 在 bash 脚本中发出 pushd 命令后,readlink 命令行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37815276/
我正在尝试创建一个非常简单的批处理脚本,其中对于复制到暂存目录的每个文件,脚本都会将其工作目录更改为该暂存目录以执行一些工作: pushd C:\Shared\ for /r %%f in (*.dl
每次我使用 pushd 或 popd 时,它都会将堆栈打印到标准输出。如何不这样做? 我不想每次都执行 pushd >/dev/null 因为我有很多脚本互相调用。 也许一个很好的覆盖就可以做到,但我
每次我使用 pushd 或 popd 时,它都会将堆栈打印到标准输出。如何不这样做? 我不想每次都执行 pushd >/dev/null 因为我有很多脚本互相调用。 也许一个很好的覆盖就可以做到,但我
我在这里和其他网站上阅读了很多关于 pushd 的问题和答案,其中绝大多数都提到了 UNC 路径的问题。但是,我遇到了一个不同的问题,我还没有看到任何提示。 使用 Windows 10 x64 Ent
我正在尝试使用 pushd 进入目录 #!/bin/bash function cloneAll { [ -d ~/mapTrials ] || mkdir ~/mapTrials p
如何使用反引号运行 pushd 和 popd? 每当我在反引号中运行 pushd/tmp 时,我都会得到一个错误: "No such file or directory - pushd /tmp" 最
我不知道是否有有效的方法来做到这一点。但是,一直想看看它是否可能。 我知道 pushd、popd 和 dirs 对于许多事情都很有用,例如在您最近访问过的目录之间进行复制。 但是,有没有一种方法可以保
我有一个很棒的大脚本,它完全依赖于 PUSHD。然而突然当我输入pushd \\server1\dir1我越来越: C:\Documents and Settings\userNameHere>pus
如何将 pwd 的输出通过管道传输到 pushd,以便我可以在当前目录上使用 pushd。我试过了 pwd | pushd 还有很多其他组合,但似乎没有任何效果。 最佳答案 pushd . 也有效 关
KSH 是否有等效于 bash pushd/popd 的内置命令? 对于那些不知道 bash 中的 pushd 和 popd 做什么的人,这里是手册页中的描述 pushd [-n] [dir]
我在 make 文件中执行以下操作 pushd %dir_name% 我得到以下错误 /bin/sh : pushd : not found 谁能告诉我为什么会出现这个错误?我检查了我的 $PATH
我在尝试从共享网络驱动器获取文件时收到“不支持 UNC 路径”错误。 我的研究告诉我 pushd 和 popd 可能有帮助,但我不知道如何正确使用它们。 pushd 和 popd 有哪些好的用法示例?
当使用这两个命令优于 cd 和 cd - 时,pushd 和 popd 的实际用途是什么? 最佳答案 实际用途是你可以建立一堆目录,形成你去过的地方的踪迹,只需替换cd即可。与 pushd . 然后,
我在我的 bash 脚本中遇到了一些麻烦来做一些适当的“pushd/popd 清理”。也就是说:如果我执行了几次 pushd,我想确保在 exit 之前执行相同数量的 popd。 但是,我注意到 pu
我正在尝试弄清楚如何在组件驻留在网络路径上的两个不同驱动器上的情况下安装一些程序。但是,每当我使用 pushd\\xyz\c$ 时,我都会得到一个映射驱动器,这意味着我无法使用任何有关使用的知识,例如
我正在尝试使用 https://github.com/rs/pushd 作为推送通知服务器。 每当我尝试添加新订阅者时,服务器都会崩溃并显示以下堆栈跟踪: /home/ec2-user/push_se
我有一个 Windows 批处理文件,它输出目录路径,例如: @echo c:\windows 我想将这个字符串“c:\windows”传递给 PUSHD 命令。我试过这个: path.bat | P
我试图从一个共享驱动器另一个共享驱动器复制今天修改的文件。 但是当我执行批处理文件时,它显示以下错误。 cmd 不支持 UNC 路径作为当前目录 脚本如下 @echo off Set Photosrc
有没有办法在 Dockerfile 中使用 pushd/popd 命令?如果可能的话,它会使一些安装脚本变得更容易。 最佳答案 可以做到,但你的图像必须有 bash 并且所有命令必须在同一个 RUN
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!