#!/bin/bash
me=$$
file=$(readlink -n /proc/$me/fd/0)
echo $file
if [[ "$file" =~ /x.sh$ ]]; then echo YES
else echo NO
fi
# Alternate solution
if [[ "$file" == */x.sh ]]; then echo YES
else echo NO
fi
# Another alternate old style bash solution
# if [ "${file##*/}" = x.sh ]; then
2条答案
按热度按时间ldioqlga1#
在
linux
上,是的,但它不是可移植的:字符串
这是因为在linux上,
/dev/fd/0
(或/proc/self/fd/0
或/proc/$$/fd/0
(仅在shell中))是一个符号链接,指向表示标准输入的文件。ldxq2e6h2#
您必须检查文件处理程序0是否被重定向到您的文件。你可以这样做:
字符串
首先,它得到正在运行的bash的PID。然后在virtual /proc文件系统中查找文件处理程序0。
/proc/<PID>fd/
中的每一项都是一个符号链接,readlink(1)
可以读取。如果它没有被重定向,符号链接会链接到一个dev文件,如下所示:/dev/pts/6
,如果它被重定向到终端,或者pipe:[33773]
,如果它是一个管道,或者socket:[36915]
,如果它是一个套接字(如/dev/tcp/ibm.com/80),或者/path/filename
,如果文件被重定向。然后file
必须匹配一个模式。在我的例子中,我测试了file
是否等于x.sh
。所以如果你打字
型
输出为
型