怎么用脚本获取当前脚本所在目录

wen 实用脚本 2

本文目录导读:

怎么用脚本获取当前脚本所在目录

  1. Bash/Shell 脚本
  2. Python 脚本
  3. Node.js/JavaScript 脚本
  4. Ruby 脚本
  5. Perl 脚本
  6. PowerShell 脚本
  7. 注意事项

Bash/Shell 脚本

#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "脚本所在目录: $DIR"

或者更简洁的写法:

#!/bin/bash
SCRIPT_DIR="$(dirname "$(realpath "$0")")"
echo "脚本所在目录: $SCRIPT_DIR"

Python 脚本

import os
import sys
# 方法1:使用 __file__
script_dir = os.path.dirname(os.path.abspath(__file__))
print(f"脚本所在目录: {script_dir}")
# 方法2:使用 sys.argv[0]
script_path = os.path.abspath(sys.argv[0])
script_dir = os.path.dirname(script_path)
print(f"脚本所在目录: {script_dir}")
# 方法3:使用 pathlib(Python 3.4+)
from pathlib import Path
script_dir = Path(__file__).parent.absolute()
print(f"脚本所在目录: {script_dir}")

Node.js/JavaScript 脚本

const path = require('path');
// 对于 CommonJS
const scriptDir = __dirname;
console.log(`脚本所在目录: ${scriptDir}`);
// 对于 ES Modules
// import { fileURLToPath } from 'url';
// import { dirname } from 'path';
// const __filename = fileURLToPath(import.meta.url);
// const __dirname = dirname(__filename);
// console.log(`脚本所在目录: ${__dirname}`);

Ruby 脚本

# 方法1:使用 __FILE__
script_dir = File.dirname(File.expand_path(__FILE__))
puts "脚本所在目录: #{script_dir}"
# 方法2:使用 caller
script_dir = File.dirname(caller[0].split(':')[0])
puts "脚本所在目录: #{script_dir}"

Perl 脚本

#!/usr/bin/perl
use Cwd 'abs_path';
use File::Basename;
my $script_dir = dirname(abs_path($0));
print "脚本所在目录: $script_dir\n";

PowerShell 脚本

# 获取脚本所在目录
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
Write-Host "脚本所在目录: $ScriptDir"
# 或者使用 PSScriptRoot(PowerShell 3.0+)
Write-Host "脚本所在目录: $PSScriptRoot"

注意事项

  1. 软链接/符号链接:如果脚本是通过软链接调用的,上述方法可能返回链接所在目录而非脚本实际目录
  2. 工作目录:这些方法获取的是脚本文件本身的目录,不是当前工作目录(pwd)
  3. 相对路径:如果需要处理相对路径,建议先获取脚本目录再拼接

选择哪种方法取决于你的实际需求和使用的脚本语言。

抱歉,评论功能暂时关闭!