which.js 960 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/usr/bin/env node
  2. const which = require('../lib')
  3. const argv = process.argv.slice(2)
  4. const usage = (err) => {
  5. if (err) {
  6. console.error(`which: ${err}`)
  7. }
  8. console.error('usage: which [-as] program ...')
  9. process.exit(1)
  10. }
  11. if (!argv.length) {
  12. return usage()
  13. }
  14. let dashdash = false
  15. const [commands, flags] = argv.reduce((acc, arg) => {
  16. if (dashdash || arg === '--') {
  17. dashdash = true
  18. return acc
  19. }
  20. if (!/^-/.test(arg)) {
  21. acc[0].push(arg)
  22. return acc
  23. }
  24. for (const flag of arg.slice(1).split('')) {
  25. if (flag === 's') {
  26. acc[1].silent = true
  27. } else if (flag === 'a') {
  28. acc[1].all = true
  29. } else {
  30. usage(`illegal option -- ${flag}`)
  31. }
  32. }
  33. return acc
  34. }, [[], {}])
  35. for (const command of commands) {
  36. try {
  37. const res = which.sync(command, { all: flags.all })
  38. if (!flags.silent) {
  39. console.log([].concat(res).join('\n'))
  40. }
  41. } catch (err) {
  42. process.exitCode = 1
  43. }
  44. }