首页 > 系统相关 >How to tell whether a file is a symbolic link in shell script All In One

How to tell whether a file is a symbolic link in shell script All In One

时间:2023-10-25 14:33:46浏览次数:38  
标签:shell script whether echo sh link test soft eric

How to tell whether a file is a soft symbolic link in shell script All In One

shell 脚本中如何判断一个文件是否是软链接 / 软符号链接

error

软链接自动指向原文件 bug ❌

# 软链接
$ test ./test.sh -ef ./test-soft-link.sh
$ echo $?
0

# 硬链接 ❌
$ test ./test.sh -ef ./test-hard-link.sh
$ echo $?
0

# test commnad
$ man test

#!/usr/bin/env bash

# 软链接 bug ❌ 自动指向原文件
echo "./test.sh -ef ./test-soft-link.sh"
# if [ ./test.sh -ef ./test-soft-link.sh ]; then
if [[ ./test.sh -ef ./test-soft-link.sh ]]; then
  echo "yes ✅"
else
  echo "no ❌"
fi

echo "./test.sh -ef ./test-hard-link.sh"
# if [ ./test.sh -ef ./test-hard-link.sh ]; then
if [[ ./test.sh -ef ./test-hard-link.sh ]]; then
  echo "yes ✅"
else
  echo "no ❌"
fi



# 单方括号 [] ✅
echo "[ ./test.sh -ef ./test-demo.sh ]"
if [ ./test.sh -ef ./test-demo.sh ]; then
  echo "yes ✅"
else
  echo "no ❌"
fi

# 双方括号 [[]] ✅
echo "[[ ./test.sh -ef ./test-demo.sh ]]"
if [[ ./test.sh -ef ./test-demo.sh ]]; then
  echo "yes ✅"
else
  echo "no ❌"
fi

solutions

# stat commnad
$ man stat

# stat
if [ "$(stat -c %h -- "$file")" -gt 1 ]; then
    echo "File has more than one name."
fi

# check if shell script is a symlink
if [[ -L "$HOME/test-soft-link.sh" ]]; then
  echo "It's a soft link ✅"
else
  echo "It's not a soft link ❌"
fi

if [[ -L /home/eric/test-soft-link.sh ]]; then
  echo "It's a soft link ✅"
else
  echo "It's not a soft link ❌"
fi
if [[ -L "$HOME/test-hard-link.sh" ]]; then
  echo "It's a soft link ✅"
else
  echo "It's not a soft link ❌"
fi

if [[ -L /home/eric/test-hard-link.sh ]]; then
  echo "It's a soft link ✅"
else
  echo "It's not a soft link ❌"
fi

image

eric@rpi4b:~ $ echo $HOME
/home/eric
eric@rpi4b:~ $ pwd
/home/eric
# /home/eric/test-hard-link.sh
# soft symbol link ✅
eric@rpi4b:~ $ [ -L ./test-soft-link.sh ] && [ -e ./test-soft-link.sh ]
eric@rpi4b:~ $ echo $?
0

# hard symbol link ❌
eric@rpi4b:~ $ [ -L ./test-hard-link.sh ] && [ -e ./test-hard-link.sh ]
eric@rpi4b:~ $ echo $?
1

demos

eric@rpi4b:~ $ ls -ali | grep test
 24553 -rw-r--r--  1 eric eric   411  9月 21 11:37 nvm_echo_test.sh
 30221 -rwxr-xr-x  1 eric eric   172  9月 21 18:03 shell-env-variable-test.sh
 30331 -rwxr-xr-x  1 eric eric    47 10月 25 00:26 test-demo.sh
 24592 -rwxr-xr-x  2 eric eric   156  9月 21 13:15 test-hard-link.sh
 24592 -rwxr-xr-x  2 eric eric   156  9月 21 13:15 test.sh
 23662 lrwxrwxrwx  1 eric eric     7 10月  8 16:44 test-soft-link.sh -> test.sh
eric@rpi4b:~ $ test ./test.sh -ef ./test-soft-link.sh
eric@rpi4b:~ $ echo $?
0
eric@rpi4b:~ $ 

image

(

标签:shell,script,whether,echo,sh,link,test,soft,eric
From: https://www.cnblogs.com/xgqfrms/p/17787142.html

相关文章

  • Shell执行脚本并输出日志文件的方法
    shell错误输出重定向到标准输出1./tmp/test.sh>/tmp/test.log2>&1>和<是文件重定向符。那么1和2是什么?shell中每个进程都和三个系统文件相关联标准输入stdin标准输出stdout标准错误stderr三个系统文件的文件描述符分别为0,1和2。所以这里2>&1的意思就是......
  • JavaScript知识点
    有哪些数据类型根据JavaScript中的变量类型传递方式,分为基本数据类型和引用数据类型两大类七种。基本数据类型包括Undefined、Null、Boolean、Number、String、Symbol(ES6新增)六种。引用数据类型只有Object—种,主要包括对象、数组和函数。基本数据类型和引用数据类型的区别两者......
  • 【Java 进阶篇】JavaScript 自动跳转首页案例
    在这篇博客中,我们将创建一个JavaScript案例,演示如何自动跳转到网站的首页。这种自动跳转通常用于欢迎页面或广告页面等场景。我们将从头开始创建这个案例,逐步介绍相关的JavaScript知识,让初学者也能理解并实现这个功能。1.什么是自动跳转?自动跳转是指当用户访问一个网页时,页面会自......
  • 【Java 进阶篇】创建 JavaScript 轮播图:让网页焕发生机
    欢迎大家来到本篇博客,今天我们将一起探讨如何使用JavaScript创建一个精美的轮播图。轮播图是现代网站设计的关键元素之一,它能够使网页更加吸引人,提高用户体验。无需担心,本文将面向基础小白,从头开始解释每一步。我们将详细介绍如何构建一个轮播图,涵盖以下内容:什么是轮播图?创建HTML......
  • 【Java 进阶篇】JavaScript BOM(浏览器对象模型)详解
    BOM,即浏览器对象模型(BrowserObjectModel),是JavaScript与浏览器之间的接口,它允许JavaScript与浏览器进行交互,实现访问和控制浏览器窗口、文档和其他浏览器功能的功能。本文将详细介绍BOM的各个方面,包括窗口对象、定时器、历史记录、位置信息等,并提供示例代码来帮助您更好地理解和运......
  • 【Java 进阶篇】JavaScript电灯开关案例:从原理到实现
    JavaScript是一门强大的编程语言,它可以用来创建各种交互式网页应用。在这篇博客中,我们将通过一个简单的电灯开关案例来深入了解JavaScript的基础概念,包括HTML、CSS和JavaScript的结合使用。我们将从头开始构建这个案例,逐步引入相关概念,以帮助初学者更好地理解JavaScript的工作原理......
  • 【Java 进阶篇】JavaScript 事件详解
    在本篇博客中,我们将深入探讨JavaScript事件,这是网页交互的核心。我们将从什么是事件开始,然后逐步介绍事件的类型、如何注册事件、事件处理程序、事件对象以及事件冒泡等相关内容。最终,我们将提供大量的示例代码来帮助您更好地理解JavaScript事件。什么是事件?在Web开发中,事件是用户......
  • windows 在 PowerShell 中,可以使用 `Get-WindowsFeature` 命令来获取 Windows 功能的
    查询:在PowerShell中,可以使用Get-WindowsFeature命令来获取Windows功能的信息,包括已安装和可用的功能。以下是Get-WindowsFeature命令的一些常见参数:-Name:指定要获取的功能的名称。可以使用通配符来匹配多个功能,例如-NameWeb将匹配所有包含"Web"的功能。-Compute......
  • [VM] The JavaScript Virtual Machine
    TableofContentIntroudctiontoVMsCPU-UnderstandingthePysicalMachineVMs-Arrays,Objects,functions,prototypechainsDepotExplorer:collectingdatafromtheVMDeopt:CallingCoventions&InliningMegamohpism&InlineCache:Objectpro......
  • [926] Batch Script - Commands
    Inthischapter,wewilllookatsomeofthefrequentlyusedbatchcommands.S.NoCommands&Description1VERThisbatchcommandshowstheversionofMS-DOSyouareusing.2ASSOCThisisabatchcommandthatassociatesanextensionwithaf......