我只想获取传递给bash脚本的输出文件的文件名(带有扩展名):
a=$1
b=$(basename -- "$a")
echo $b #for debug
if [ "$b" == "test" ]; then
echo $b
fi
如果我输入:
./test.sh /home/oscarchase/test.sh > /home/oscarchase/test.txt
我想得到:
test.txt
在我的输出文件中,但我得到:
test.sh
我如何继续解析第一个参数以获得正确的名称?
找不到直接在文件描述符1(标准输出)上打开的文件的名称bash
;这取决于您使用的操作系统。您可以使用lsof
和awk
执行此操作;它不依赖于proc
文件系统,尽管确切的调用可能有所不同,但是此命令在Linux和Mac OS X上均适用,因此至少可以移植。
output=$( lsof -p $$ -a -d 1 -F n | awk '/^n/ {print substr($1, 2)}' )
一些解释:
-p $$
选择当前进程的打开文件-d 1
仅选择文件描述符1-a
用于同时要求两者-p
和-d
适用(默认值是显示符合任一条件的所有文件-F n
修改输出,以使每个字段只有一行,并以标识符字符作为前缀。这样,您将得到两行:一行以p
进程ID开头并表示该进程ID,另一行以`n开头表示该文件的文件名。awk
命令只需选择以开头的行,n
然后输出第一个字段减去initial即可n
。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句