Я думаю, что Вам нужен, по крайней мере, вызов оболочки в xargs:
ls A/*.dat | xargs -I file sh -c "./a.out < file > file.ans"
Править: Нужно отметить, что этот подход не работает, когда имена файлов содержат пробел. Не может работать. Даже если бы Вы использовали, находят-0 и xargs-0 заставлять xargs понять пробелы правильно, вызов оболочки-c каркал бы на них. Однако OP explicitely попросивший xargs решения, и это - лучшее xargs решение, которое я предложил. Если пробел в именах файлов мог бы быть проблемой, использование находят - должностное лицо или цикл оболочки.
Возможности состоят в том, что у Вас действительно был a /usr/local/bin/npm
и Ваша оболочка помнит это в своем кэше. Можно очистить кэш с hash -d npm
. Кэш не совместно используется в экземплярах оболочки, таким образом, проблема не продлится.
Причина вывод which
несовместимо тому, что делает Ваша оболочка это which
внешняя программа, таким образом, она не совместно использует кэш удара. Использовать type
вместо этого, это - оболочка, встроенная, таким образом, это более надежно.
Можно считать себя довольно удачливыми, потому что Вы только что изучили простой способ, что Вы не должны помещать своих дополнительных двоичных директоров перед PATH
переменная. Нормальное PATH
переменная в Вашем случае должна посмотреть что-то как
PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/steven/local/bin:/home/steven/local/bin:/home/steven/local/bin:/home/steven/local/bin
Но проблема, которая на самом деле вызвала Вашу ошибку, не действительно с PATH
, скорее, с какой npm
команда была, вероятно, искажена к. Для изучения этого ввести
type npm
Другая опция могла быть этим /usr/local/bin/npm
просто поврежденная символьная ссылка на /home/steven/local/bin/npm
(но Вы узнали бы это с вышеупомянутой командой также).