Использовать "$@"
.
#!/bin/sh
trickle -u 80 ~/bin/s3cmd.py "$@"
Нет никакого функционального различия между $*
и $@
при перенесении неявному разделению слова (почти всегда при закрытии кавычки). При заключении в кавычки, однако, $*
единственная строка, разделенная первым символом IFS
, и "$@"
действительный массив (что Вы хотите).
$ set foo bar baz
$ IFS=c
$ printf '%s\n' "$@"
foo
bar
baz
$ printf '%s\n' "$*"
foocbarcbaz
Можно использовать readlink
для печати, куда указывает ссылка. Аргумент readlink
без параметров должен быть ссылкой, если передать его в файл, он ничего не напечатает. Параметр -f
для readlink
из пакета coreutils рекурсивно следует по ссылкам и печатает имя файла, даже если аргумент уже является файлом.
Если вы это сделаете ( -n
подавляет новую строку в конце вывода readlink
):
dpkg -S "$(readlink -fn "$(which rename)")"
Вы получите ответ:
perl: /usr/bin/prename
в этом случае ссылка будет удалена из prename
, но это не гарантировано (например, если ссылка указывала на исполняемый файл rename
Как указано в @ 011c, если он установлен, можно использовать realpath
в качестве альтернативы readlink -f
Они, вероятно, дважды нажимали клавишу TAB для завершения ввода имени файла.
То, что именно вы показываете, немного зависит от оболочки: например, zsh можно настроить так, чтобы показать вам дату и размер файла, и это достаточно умно, чтобы показать вам только каталоги, так как вы не можете cd
в файл в любом случае.
Пример вывода bash:
$ cd (tabtab)
dira/ dirb/ file.txt
Пример вывода zsh после некоторой настройки:
[0 1058 9:52:56] ~/temp/tabtest % cd dir
drwxrwxr-x 2 user group 4096 Oct 3 09:51 dira
drwxrwxr-x 2 user group 4096 Oct 3 09:51 dirb
(zsh завершен до dir
на первой вкладке, так как невозможно выполнить cd в file.txt.)
Я знал, что хватаюсь за соломинку, но UNIX никогда не дает сбой!
Вот как мне это удалось:
bash$ gdb --pid 8909
...
Loaded symbols for /lib/i386-linux-gnu/i686/cmov/libnss_files.so.2
0xb76e7424 in __kernel_vsyscall ()
Затем по запросу (gdb)
я выполнил команду, вызовите write_history («/tmp/foo »)
, который запишет эту историю в файл /tmp/foo
.
(gdb) call write_history("/tmp/foo")
$1 = 0
Затем отсоединяюсь от процесса.
(gdb) detach
Detaching from program: /bin/bash, process 8909
И выйдите из gdb
.
(gdb) q
И достаточно...
bash$ tail -1 /tmp/foo
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
Для упрощения повторного использования в будущем я написал сценарий bash , автоматизирующий процесс.
Поскольку команда все еще работает на экране, его родительская Bash не перечитает никакой истории, так как:
^ z
, затем ART AROW
^ a ^ A
- потому что экран (1) - и ^ E
) и ECHO + перенаправляют в файл FG
Чтобы преследовать командование казни , есть предостережения, но это достаточно полезно, большую часть времени.
bc
, поставляемый с Solaris, является историческим.
Чтобы получить то же чувство bc
, что и в Linux, просто установите пакет gbc OpenCSW .
Перед первым regexp с космосом:
grep -E "\s+-?[[:digit:]]{1,3}\.[[:digit:]]{0,5}"
должен сделать трюк, так как он исключает совпадение в начале строки.
Если вы хотите только 4-й столбец, вы можете легко достичь этого с помощью любого GNU sed:
sed -r 's/^\S+\s+\S+\s+\S+\s+(\S+)(\s.*|)$/\1/'
, где \s
- любой символ пробела (космос, tab и различные «каналы» 1 ) и \S
- символ, не являющийся пробелом, или (в гораздо более чистом пути) с sed | cut
:
sed 's/\s\+/\t/g' | cut -f4
, который сначала сжимает все места в одну закладку, а затем использует вырезание
для вырезания четвертого столбца. Это также позволяет легко выбирать большее количество столбцов, например, с помощью cut -f1,4
и т.д.
1) То есть форма подачи, линейная подача, возврат каретки, хотя средняя обычно интерпретируется sed
как разделитель линии.
Я знаю, что вы нашли свой ответ, но есть ли причина, по которой вы не можете сделать что-то подобное:
(set -x; for f in 1 2 3 4 ; do echo "$f"; sleep $f; done)
Возможно, вы не можете объединить выходные данные фактического задания и выходные данные bash, показывающие текущую выполняемую строку.
Также, FWIW, если вы предпочитаете многословность, установите -o xtrace
.