Проблема подстановки переменных Bash

На основании комментария Хаука Лейджинга. Когда вы запускаете strace на бинаре sshd, он выводит отладочную информацию о том, как программа запускается и к каким файлам она пытается получить доступ. С помощью grep мы можем перечислить файлы /etc/, к которым она пытается получить доступ.

$ sudo strace -e trace=file /usr/sbin/sshd |& grep '^open('|grep '/etc/'
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/etc/ssh/sshd_config", O_RDONLY|O_LARGEFILE) = 3
open("/etc/gai.conf", O_RDONLY)         = 3
open("/etc/nsswitch.conf", O_RDONLY)    = 3
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ssh/ssh_host_rsa_key", O_RDONLY|O_LARGEFILE) = 3
open("/etc/ssh/blacklist.RSA-2048", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/etc/ssh/ssh_host_dsa_key", O_RDONLY|O_LARGEFILE) = 3
open("/etc/ssh/blacklist.DSA-1024", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/etc/ssh/ssh_host_ecdsa_key", O_RDONLY|O_LARGEFILE) = 3
open("/etc/ssh/blacklist.ECDSA-256", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)

Из вышеприведенного строка вывод /etc/ssh/sshd_config используется в качестве конфигурации ssh.

0
21.01.2015, 14:08
2 ответа

Вам нужно использовать eval:

export var="/a/b/c"
for d in $(cat file.f)
do
    eval echo "$d"
    eval cd $d
    pwd
done

или лучше, используя чтение:

export var="/a/b/c"
while read d
do
        eval echo "$d"
        eval cd "$d"
        pwd
done < file.f
1
28.01.2020, 02:51

Вы можете использовать:

$ var="/home/durrantm/a/b/c"
$ cd $var
$ pwd
/home/durrantm/a/b/c
0
28.01.2020, 02:51

Теги

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