Могу ли я передать сценарий bash локальному файлу в $ 1 и дать ему эхо абсолютный путь файла? [Дубликат]

Этот вопрос уже имеет ответ здесь: как вы можете быстро получить полный путь к файлу для использования в терминале? 7 ответов Проверка того, что файл существует в скрипте 2 ответа

Довольно понятно.

Первый аргумент должен быть:

Проверено, существует ли файл Echo абсолютный путь этого файла

Например:

+akiva@akiva-ThinkPad-X230:~$ ./myscript myfile.txt
/home/akiva/myfile.txt

Спасибо

1
задан 14 March 2017 в 21:45

2 ответа

Сценарий не нужен. Достаточно одной команды readlink:

$ cd /etc/

$ readlink -e passwd
/etc/passwd

Из man readlink:

   -e, --canonicalize-existing
          canonicalize by following every symlink in every component
          of the given name recursively, all components must exist
8
ответ дан 23 May 2018 в 00:38
  • 1
    Ну, мне нужен сценарий для передачи аргументов в мою папку сборки: P – Akiva 14 March 2017 в 21:20
  • 2
    @Akiva так вставляем команду в скрипт: p Script - это не что иное, как сбор команд. – Sergiy Kolodyazhnyy 14 March 2017 в 21:22
#!/bin/bash

[[ -e "$1" ]] && echo realpath -e "$1"

Обновить, чтобы позаботиться о не буквенно-цифровых символах:

#!/bin/bash

[[ -e "$1" ]] && echo "$1" | sed -r 's/[^a-zA-Z0-9\-]/\//g' | realpath -e "$1"

Подготовить скрипт: chmod +x script_name, затем

использовать его: ./script_name filename [!d2 ]

Информация:

[[ -e "$1" ]]: проверьте, существует ли переданный файл.
7
ответ дан 23 May 2018 в 00:38
  • 1
    Это хорошая команда, но также следует отметить, что некоторые оболочки имеют встроенную команду readlink. Например, у моей оболочки mksh есть такое встроенное, поэтому синтаксис отличается. Обратите внимание, что в вашем ответе. – Sergiy Kolodyazhnyy 14 March 2017 в 21:27
  • 2
    @Serg, он использует realpath, а не readlink. – terdon♦ 14 March 2017 в 21:33
  • 3
    @Serg, а не эксперт, но вы говорите, что ваша оболочка не даст правильный выход этой командой? – George Udosen 14 March 2017 в 21:34
  • 4
    Ах, нет. @Serg означало, что realpath, который вы используете в своем ответе, является встроенной командой некоторых оболочек. Не readlink, который не встроен и является стандартным инструментом, определяемым POSIX. Это означает, что поведение realpath может меняться в зависимости от используемой оболочки. – terdon♦ 14 March 2017 в 21:42
  • 5
    @George Да, потому что варианты там разные. Смотрите: paste.ubuntu.com/24177730 Это неважно, учитывая, что dash и bash являются единственными оболочками, присутствующими в Ubuntu по умолчанию. Это просто предостережение, которое следует упомянуть – Sergiy Kolodyazhnyy 14 March 2017 в 21:43

Другие вопросы по тегам:

Похожие вопросы: